sql >> Base de Datos >  >> RDS >> PostgreSQL

Valores agregados en un rango de horas, cada hora

Una función de ventana con un marco hace esto increíblemente simple :

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

Demostración en vivo en sqlfiddle.

El marco para cada promedio es la fila actual más las 7 siguientes. Esto supone que tiene exactamente una fila para cada hora. Sus datos de muestra parecen implicar eso, pero no lo especificó.

Tal como es, avg_8h para la final (según ts ) 7 filas del conjunto se calculan con menos filas, hasta que el valor de la última fila es igual a su propio promedio. No especificó cómo tratar el caso especial.