sql >> Databáze >  >> RDS >> PostgreSQL

Agregovat hodnoty v rozsahu hodin, každou hodinu

funkce okna s vlastním rámu je to úžasně jednoduché :

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

Živá ukázka na sqlfiddle.

Rámec pro každý průměr je aktuální řádek plus následujících 7. To předpokládá, že máte přesně jeden řádek pro každou hodinu. Zdá se, že to naznačují vaše ukázková data, ale neuvedli jste to.

Jak to je, avg_8h pro finále (podle ts ) 7 řádků sady je počítáno s méně řádky, dokud se hodnota posledního řádku nerovná jeho vlastnímu průměru. Neuvedli jste, jak se vypořádat se zvláštním případem.



  1. Nahrávání souborů/obrázků blob do Mysql

  2. mysqldump z dotazu

  3. Příklad klauzule Oracle PIVOT s poddotazem

  4. Získejte všechny uživatele kromě aktuálně přihlášeného uživatele v laravel výmluvné