sql >> Database teknologi >  >> RDS >> PostgreSQL

Samlede værdier over et interval af timer, hver time

En vinduefunktion med en brugerdefineret ramme gør dette utroligt 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.

Rammen for hvert gennemsnit er den aktuelle række plus de følgende 7. Dette forudsætter, at du har præcis én række for hver time. Dine eksempeldata lader til at antyde det, men du har ikke specificeret.

Sådan er det, avg_8h til finalen (ifølge ts ) 7 rækker af sættet beregnes med færre rækker, indtil værdien af ​​den sidste række er lig med sit eget gennemsnit. Du har ikke angivet, hvordan du skal håndtere den særlige sag.



  1. MySQL VARCHAR størrelse?

  2. Top sikkerhedskopieringsværktøjer til PostgreSQL

  3. Sådan bruger du homebrew til at nedgradere postgresql fra 10.1 til 9.6 på Mac OS

  4. MariaDB INTERSECT Operator forklaret