> 데이터 베이스 > MySQL 튜토리얼 > SQL에서 겹치는 날짜 간격을 효율적으로 병합하는 방법은 무엇입니까?

SQL에서 겹치는 날짜 간격을 효율적으로 병합하는 방법은 무엇입니까?

Susan Sarandon
풀어 주다: 2025-01-04 16:22:41
원래의
581명이 탐색했습니다.

How to Efficiently Merge Overlapping Date Intervals in SQL?

겹치는 날짜 간격 병합

데이터 분석 영역에서는 시간 범위나 날짜 간격이 겹치는 경우가 많습니다. 이러한 겹치는 간격을 고유한 레코드로 효과적으로 병합하려면 강력하고 효율적인 솔루션이 필요합니다.

루프 내에서 일련의 UPDATE 문을 활용하여 겹치는 날짜 간격을 병합하는 간단한 접근 방식이 주어진 질문에 제시되어 있습니다. 이 방법은 원하는 결과를 달성하지만 더 우아하거나 성능이 뛰어난 솔루션이 있을지에 대한 우려를 불러일으킵니다.

대체 접근 방식

제공된 답변에 구현된 대체 접근 방식인 하네스 상관 하위 쿼리와 NOT EXISTS 조건의 힘. 이 접근 방식에는 겹치는 간격을 식별하고 병합하기 위해 함께 작동하는 여러 SQL 문이 포함됩니다.

SELECT 
       s1.StartDate,
       --t1.EndDate 
       MIN(t1.EndDate) AS EndDate
FROM @T s1 
INNER JOIN @T t1 ON s1.StartDate <= t1.EndDate
  AND NOT EXISTS(SELECT * FROM @T t2 
                 WHERE t1.EndDate >= t2.StartDate AND t1.EndDate < t2.EndDate) 
WHERE NOT EXISTS(SELECT * FROM @T s2 
                 WHERE s1.StartDate > s2.StartDate AND s1.StartDate <= s2.EndDate) 
GROUP BY s1.StartDate 
ORDER BY s1.StartDate 
로그인 후 복사

단계 구분:

  1. 겹치는 간격 식별: 쿼리는 각 간격(s1)을 해당 간격과 겹치는 다른 간격(t1)과 쌍을 이룹니다. 이는 INNER JOIN 조건 s1.StartDate <= t1.EndDate.
  2. 간접 중복 제외를 통해 달성됩니다. 하위 쿼리 NOT EXISTS(SELECT * FROM @T t2 WHERE t1.EndDate > ;= t2.StartDate AND t1.EndDate < t2.EndDate)은 직접적인 중복만 고려되도록 합니다. 이렇게 하면 겹치는 간격 체인으로 간접적으로 연결된 간격이 병합되는 것을 방지할 수 있습니다.
  3. 중복 간격 제거: 외부 NOT EXISTS 조건 NOT EXISTS(SELECT * FROM @T s2 WHERE s1. 시작 날짜 > s2.StartDate AND s1.StartDate <= s2.EndDate)는 시작 날짜는 동일하지만 종료 날짜가 다른 개별 간격을 병합하는 것을 방지합니다. 이렇게 하면 고유한 간격만 결과에 표시됩니다.
  4. 겹치지 않는 간격 선택: 하위 쿼리를 연관시키고 NOT EXISTS 조건을 활용하여 쿼리는 중복을 제외하면서 겹치는 간격을 효과적으로 식별하고 병합합니다. 또는 간접적으로 연결된 간격.
  5. 이 접근 방식은 반복에 비해 향상된 성능과 명확성을 제공합니다. UPDATE 방법을 사용하므로 SQL 환경에서 겹치는 날짜 간격을 병합하는 데 선호되는 솔루션입니다.

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

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿