PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Агрегирани стойности за диапазон от часове, всеки час

прозоречна функция с персонализиран рамката прави това удивително просто :

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

Демо на живо на sqlfiddle.

Рамката за всяка средна стойност е текущият ред плюс следващите 7. Това предполага, че имате точно един ред за всеки час. Вашите примерни данни изглежда предполагат това, но не сте уточнили.

Така е, avg_8h за финал (според ts ) 7 реда от набора се изчисляват с по-малко редове, докато стойността на последния ред се изравни със собствената си средна стойност. Не сте посочили как да се справите със специалния случай.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Максимален брой записи в histogram_bounds

  2. Прозорците на Postgres функционират с агрегатно групиране по

  3. Добавяне на име на таблица към всяка колона в набор от резултати в SQL? (По-специално Postgres)

  4. Как да се възползвате от новите функции за разделяне в PostgreSQL 11

  5. Как да върнете записи в правилен ред в PostgreSQL