>데이터 베이스 >MySQL 튜토리얼 >SQL에서 시간 간격으로 행을 효율적으로 계산하는 방법은 무엇입니까?

SQL에서 시간 간격으로 행을 효율적으로 계산하는 방법은 무엇입니까?

Barbara Streisand
Barbara Streisand원래의
2025-01-05 08:07:40859검색

How to Efficiently Count Rows by Time Intervals in SQL?

시간 간격으로 행 계산: 최선의 접근 방식 공개

애플리케이션은 종종 타임 스탬프가 찍힌 이벤트를 처리하고 특정 시간을 기준으로 데이터를 분석해야 합니다. 간격. 각 간격 내의 이벤트 수를 효과적으로 계산하기 위해 개발자는 다양한 접근 방식을 고민할 수 있습니다.

1. 임의의 간격에 대한 동적 SQL 쿼리

SQL 쿼리를 사용하여 임의의 시간 간격으로 이벤트를 그룹화하는 것은 효율적이고 선호되는 방법입니다. 하지만 Postgres는 이 기능을 기본적으로 지원하지 않습니다.

2. 시간 정렬을 이용한 무차별 대입 방식

시작/종료 기간 내의 모든 기록을 쿼리하고 원하는 간격으로 수동으로 집계하는 것은 간단하지만 번거로운 접근 방식입니다. 타임스탬프별로 결과를 정렬해야 하며 동적 간격 사용자 정의가 부족합니다.

3. 간격 데이터 사전 저장

이벤트 테이블의 각 간격에 대해 별도의 필드를 유지 관리하면 런타임 계산을 방지하고 보고를 단순화할 수 있습니다. 그러나 이 방법은 테이블 크기를 두 배로 늘리므로 최적이 아닐 수 있습니다.

모범 사례

모범 사례는 애플리케이션의 특정 요구 사항과 데이터 크기에 따라 다릅니다.

  • 상당한 수의 간격 또는 임의의 간격 사용자 정의의 경우 동적 SQL 쿼리는 다음과 같습니다. 적합한. Postgres에는 기본 지원이 부족하지만, Lead()와 같은 창 기능을 사용하여 해결 방법이 있습니다.
  • 소수 고정 간격(예: 일 또는 주)의 경우 간격 데이터를 미리 저장합니다. 쿼리 실행을 단순화할 수 있지만 테이블 크기가 늘어납니다.
  • 실시간 솔루션이거나 테이블 증가가 중요한 경우 우려되는 점은 시간 정렬을 사용하는 무차별 방식이 더 적절할 수 있습니다.

date_bin() 함수가 포함된 Postgres 14

Postgres 14 이상 , date_bin() 함수를 사용하면 타임스탬프를 간격으로 직접 그룹화할 수 있습니다. 이렇게 하면 쿼리가 단순화되고 효율적인 결과가 제공됩니다.

예: 15분 간격으로 이벤트 계산

주어진 시간 범위 내에서 15분 간격으로 이벤트를 계산하려면 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 이하의 경우 generate_series() 및 창 함수를 사용하는 대체 접근 방식을 사용할 수 있습니다.

위 내용은 SQL에서 시간 간격으로 행을 효율적으로 계산하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.