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;
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.