sql >> Databasteknik >  >> RDS >> PostgreSQL

Sammanlagda värden över ett intervall av timmar, varje timme

En fönsterfunktion med en anpassad ram gör detta otroligt enkelt :

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

Live-demo på sqlfiddle.

Ramen för varje medelvärde är den aktuella raden plus följande 7. Detta förutsätter att du har exakt en rad för varje timme. Dina exempeldata verkar antyda det, men du har inte angett det.

Som det är, avg_8h för finalen (enligt ts ) 7 rader av uppsättningen beräknas med färre rader, tills värdet på den sista raden är lika med dess eget medelvärde. Du angav inte hur du skulle hantera specialfallet.



  1. Native JSON-stöd i MYSQL 5.7:vilka är fördelarna och nackdelarna med JSON-datatyp i MYSQL?

  2. Varför fungerar inte ODP.NET 11 xcopy-distribution på en dator med Oracle DB 10 installerat?

  3. SQL Server 2008- Få tabellbegränsningar

  4. MySQL - Hitta rader som matchar alla rader från den sammanfogade tabellen