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

Postgresql SQL GROUP BY интервал от време с произволна точност (до мили секунди)

Можете да генерирате таблица с "кофи", като добавите интервали, създадени от generate_series(). Този SQL оператор ще генерира таблица с петминутни кофи за първия ден (стойността на min(measured_at) ) във вашите данни.

select 
  (select min(measured_at)::date from measurements) + ( n    || ' minutes')::interval start_time,
  (select min(measured_at)::date from measurements) + ((n+5) || ' minutes')::interval end_time
from generate_series(0, (24*60), 5) n

Увийте това израз в общ табличен израз и можете да се присъедините и групирате върху него, сякаш е основна таблица.

with five_min_intervals as (
  select 
    (select min(measured_at)::date from measurements) + ( n    || ' minutes')::interval start_time,
    (select min(measured_at)::date from measurements) + ((n+5) || ' minutes')::interval end_time
  from generate_series(0, (24*60), 5) n
)
select f.start_time, f.end_time, avg(m.val) avg_val 
from measurements m
right join five_min_intervals f 
        on m.measured_at >= f.start_time and m.measured_at < f.end_time
group by f.start_time, f.end_time
order by f.start_time

Групирането по произволен брой секунди е подобно - използвайте date_trunc() .

По-общо използване на generate_series() ви позволява да избегнете отгатването на горната граница за петминутни кофи. На практика вероятно бихте изградили това като изглед или функция. Може да получите по-добра производителност от основна таблица.

select 
  (select min(measured_at)::date from measurements) + ( n    || ' minutes')::interval start_time,
  (select min(measured_at)::date from measurements) + ((n+5) || ' minutes')::interval end_time
from generate_series(0, ((select max(measured_at)::date - min(measured_at)::date from measurements) + 1)*24*60, 5) n;


  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 enum и Java enum

  2. Използване на JSONB в PostgreSQL:Как ефективно да съхранявате и индексирате JSON данни в PostgreSQL

  3. Как да върнете идентификатори на вмъквания с Ibatis (с ключова дума RETURNING)

  4. Изключете предупреждението в sqlalchemy

  5. Как да групирате времеви печати в острови (въз основа на произволна празнина)?