>데이터 베이스 >MySQL 튜토리얼 >SQL에서 연속 날짜 범위를 식별하고 추출하는 방법은 무엇입니까?

SQL에서 연속 날짜 범위를 식별하고 추출하는 방법은 무엇입니까?

Mary-Kate Olsen
Mary-Kate Olsen원래의
2025-01-03 05:34:38139검색

How to Identify and Extract Consecutive Date Ranges in SQL?

SQL에서 연속 날짜 범위 식별

질문:

다음이 포함된 테이블에서 연속 날짜 범위를 추출해야 합니다. 정렬되지 않은 날짜의 단일 열입니다. 이러한 범위는 달력 개체를 정확하게 채우기 위해 시작 날짜와 종료 날짜가 필요한 시간 세그먼트를 나타냅니다.

해결책:

접근 방식:

SQL을 사용하여 이 문제를 해결하기 위해 "갭 앤 아일랜드" 방법을 사용할 수 있습니다. 이 방법은 행 번호와의 차이를 기준으로 연속 날짜를 그룹화합니다. 이 값은 각 연속 시퀀스에 대해 일정하게 유지됩니다. 그런 다음 MIN() 및 MAX() 함수를 사용하여 각 그룹의 시작 날짜와 종료 날짜를 추출합니다.

SQL 쿼리:

WITH t AS (
  SELECT InfoDate d,ROW_NUMBER() OVER(ORDER BY InfoDate) i
  FROM @d
  GROUP BY InfoDate
)
SELECT MIN(d),MAX(d)
FROM t
GROUP BY DATEDIFF(day,i,d)

설명:

  • WITH 절은 다음과 같은 이름의 공통 테이블 표현식(CTE)을 생성합니다. t.
  • CTE는 원래 테이블 @d의 각 행에 대해 InfoDate 열 d와 행 번호 i를 선택합니다.
  • 데이터는 InfoDate별로 그룹화되어 각 연속 시퀀스 내에서 고유성을 보장합니다.
  • SELECT 문은 각 그룹의 최소 및 최대 날짜를 계산하여 연속 범위의 시작 및 종료 날짜를 나타냅니다.
  • DATEDIFF() 함수는 행 번호와 날짜 간의 차이를 계산하는 데 사용되며, 이는 각 연속 시퀀스 내에서 일정하게 유지되어 연속 날짜를 효과적으로 그룹화합니다.

출력:

결과 테이블에는 다음이 포함되어야 합니다. 열:

  • StartDate
  • EndDate

이 출력은 각 연속 날짜 범위의 시작 및 종료 날짜를 제공하므로 달력 개체를 다음으로 채울 수 있습니다. 필요한 날짜 정보를 알려드립니다.

위 내용은 SQL에서 연속 날짜 범위를 식별하고 추출하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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