PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Agreguj wartości w zakresie godzin, co godzinę

funkcja okna z niestandardową ramka czyni to niesamowicie prostym :

SELECT ts
      ,avg(val) OVER (ORDER BY ts
                      ROWS BETWEEN CURRENT ROW AND 7 FOLLOWING) AS avg_8h
FROM tbl;

Demo na żywo w sqlfiddle.

Ramka dla każdej średniej to bieżący wiersz plus kolejne 7. Zakłada się, że masz dokładnie jeden wiersz na każdą godzinę. Twoje przykładowe dane wydają się to sugerować, ale nie określiłeś.

Tak to jest, avg_8h na finał (zgodnie z ts ) 7 wierszy zbioru jest obliczanych z mniejszą liczbą wierszy, aż wartość ostatniego wiersza zrówna się z jego własną średnią. Nie określiłeś, jak postępować w szczególnym przypadku.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Zainstaluj psycopg2 na Ubuntu

  2. funkcja agregująca grupuj według daty w postgresql

  3. Pobierz najnowsze dziecko na rodzica z dużej tabeli — zapytanie jest zbyt wolne

  4. Szczegółowe informacje na temat dostawców chmury:PostgreSQL na AWS Aurora

  5. Używanie pg_notify w funkcji wyzwalacza PostgreSQL