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

Групиране по интервали от данни

WITH t AS (
   SELECT ts, (random()*100)::int AS bandwidth
   FROM   generate_series('2012-09-01', '2012-09-04', '1 minute'::interval) ts
   )

SELECT date_trunc('hour', ts) AS hour_stump
      ,(extract(minute FROM ts)::int / 15) AS min15_slot
      ,count(*) AS rows_in_timeslice               -- optional
      ,sum(bandwidth) AS sum_bandwidth
FROM   t
WHERE  ts >= '2012-09-02 00:00:00+02'::timestamptz -- user's time range
AND    ts <  '2012-09-03 00:00:00+02'::timestamptz -- careful with borders 
GROUP  BY 1, 2
ORDER  BY 1, 2;

CTE t предоставя данни, каквито може да съдържа вашата таблица:едно времеви печат ts на минута с bandwidth номер. (Не се нуждаете от тази част, вместо това работите с вашата маса.)

Ето едно много подобно решение за много подобен въпрос - с подробно обяснение как работи това конкретно агрегиране:

  • date_trunc 5 минути интервал в PostgreSQL

Ето подобно решение за подобен въпрос относно бягането суми - с подробно обяснение и връзки за различните използвани функции:

  • PostgreSQL:текущ брой редове за заявка „по минута“

Допълнителен въпрос в коментар

WITH -- same as above ...

SELECT DISTINCT ON (1,2)
       date_trunc('hour', ts) AS hour_stump
      ,(extract(minute FROM ts)::int / 15) AS min15_slot
      ,bandwidth AS bandwith_sample_at_min15
FROM   t
WHERE  ts >= '2012-09-02 00:00:00+02'::timestamptz
AND    ts <  '2012-09-03 00:00:00+02'::timestamptz
ORDER  BY 1, 2, ts DESC;

Извлича един неагрегирана извадка на интервал от 15 минути - от последния наличен ред в прозореца. Това ще бъде 15-ата минута, ако редът не липсва. Решаващи части са DISTINCT ON и ORDER BY .
Повече информация за използваната техника тук:

  • Изберете ли първия ред във всяка група GROUP BY?


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

  2. PostgreSQL – Как да елиминирате повтарящи се стойности

  3. Как да създадете таблица само ако тя не съществува в PostgreSQL

  4. Използвайте множество конфликт_цели в клауза ON CONFLICT

  5. Търсене на пълен текст в Postgres или CouchDB?