Een vensterfunctie met een aangepaste kader maakt dit verbazingwekkend eenvoudig :
SELECT ts
,avg(val) OVER (ORDER BY ts
ROWS BETWEEN CURRENT ROW AND 7 FOLLOWING) AS avg_8h
FROM tbl;
Het frame voor elk gemiddelde is de huidige rij plus de volgende 7. Dit veronderstelt dat je precies één rij hebt voor elk uur. Je voorbeeldgegevens lijken dat te suggereren, maar je hebt het niet gespecificeerd.
Zoals het is, avg_8h
voor de finale (volgens ts
) 7 rijen van de set worden berekend met minder rijen, totdat de waarde van de laatste rij gelijk is aan zijn eigen gemiddelde. U heeft niet aangegeven hoe u met het speciale geval moet omgaan.