прозоречна функция с персонализиран рамката прави това удивително просто :
SELECT ts
,avg(val) OVER (ORDER BY ts
ROWS BETWEEN CURRENT ROW AND 7 FOLLOWING) AS avg_8h
FROM tbl;
Рамката за всяка средна стойност е текущият ред плюс следващите 7. Това предполага, че имате точно един ред за всеки час. Вашите примерни данни изглежда предполагат това, но не сте уточнили.
Така е, avg_8h
за финал (според ts
) 7 реда от набора се изчисляват с по-малко редове, докато стойността на последния ред се изравни със собствената си средна стойност. Не сте посочили как да се справите със специалния случай.