문제 설명
타임 스탬프 이벤트가 포함된 이벤트 테이블을 고려해보세요. 목표는 일, 시간 또는 사용자 정의 간격과 같은 특정 시간 간격 내에 발생하는 이벤트 수를 보고하는 것입니다. 목표는 Postgres에서 단일 SQL 쿼리를 통해 이 정보를 동적으로 생성하는 가장 효율적인 접근 방식을 결정하는 것입니다.
솔루션
Date_bin() 사용(Postgres 14 이상)
Postgres 14에서는 이 문제에 대한 간단한 해결책을 제공하는 'date_bin()' 함수:
SELECT date_bin('15 min', e.ts, '2018-05-01') AS start_time, count(e.ts) AS events FROM event e GROUP BY 1 ORDER BY 1;
전체 행 집합 생성(Postgres 13 이하)
이전의 경우 Postgres 버전에서 다음 쿼리는 전체 시간 슬롯 세트를 생성하고 LEFT JOIN을 수행하여 각 시간 슬롯 내의 이벤트 수를 계산합니다. 간격:
WITH grid AS ( SELECT start_time, lead(start_time, 1, 'infinity') OVER (ORDER BY start_time) AS end_time FROM ( SELECT generate_series(min(ts), max(ts), interval '17 min') AS start_time FROM event ) sub ) SELECT start_time, count(e.ts) AS events FROM grid g LEFT JOIN event e ON e.ts >= g.start_time AND e.ts < g.end_time GROUP BY start_time ORDER BY start_time;
고려 사항
위 내용은 PostgreSQL에서 시간 간격으로 이벤트를 효율적으로 계산하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!