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

Избиране на средна стойност от записи, групирани по 5-минутни периоди

SELECT grid.t5
      ,min(t."time") AS min_time
--    ,array_agg(extract(min FROM t."time")) AS 'players_on' -- optional
      ,avg(t.players) AS avg_players
      ,avg(t.servers) AS avg_servers
FROM (
   SELECT generate_series(min("time")
                         ,max("time"), interval '5 min') AS t5
   FROM tbl
   ) grid
LEFT JOIN tbl t ON t."time" >= grid.t5
               AND t."time" <  grid.t5 +  interval '5 min'
GROUP  BY grid.t5
ORDER  BY grid.t5;

Обяснете

  • Подзаявката grid създава един ред на всеки 5 минути от минимума до максимума на "time" във вашата таблица.

  • LEFT JOIN обратно към данните за нарязване на таблицата на 5-минутни интервали. Внимателно включете долна граница и изключване горна граница.

  • За да изпуснете 5-минутни интервали, където нищо не се е случило, използвайте JOIN на мястото на LEFT JOIN .

  • За да накарате вашите часове в мрежата да започват от 0:00, 5:00 и т.н., закръглете надолу min("time") в generate_series() .

Повече обяснения в тези свързани отговори:
Групиране по интервали на данни
PostgreSQL:текущо преброяване на редове за заявка „по минути"

Настрана:не бих използвал time като идентификатор. Това е запазена дума в стандартния SQL и име на функция/тип в Postgres.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как мога да получа достъп до база данни postgresql от matlab без кутия с инструменти за база данни на matlabs?

  2. Postgresql конектори, използващи VC++

  3. Как да вмъкнете в масив в PostgreSQL

  4. Разработване на PostgreSQL за Windows, част 2

  5. Спрете (продължителното) изпълнение на SQL заявка в PostgreSQL, когато сесия или заявки вече не съществуват?