> 데이터 베이스 > MySQL 튜토리얼 > 중복되는 날짜 간격을 효율적으로 병합할 수 있는 방법은 무엇입니까?

중복되는 날짜 간격을 효율적으로 병합할 수 있는 방법은 무엇입니까?

Mary-Kate Olsen
풀어 주다: 2024-12-30 21:43:15
원래의
693명이 탐색했습니다.

How Can We Efficiently Merge Overlapping Date Intervals?

겹치는 날짜 간격 병합: 효율적인 접근 방식

겹치는 날짜 간격을 병합하는 작업은 다양한 상황에서 자주 발생합니다. 이 문제를 해결하는 일반적인 접근 방식 중 하나는 더 이상 겹치는 부분이 없을 때까지 간격을 반복적으로 업데이트하는 것입니다. 이 방법은 상대적으로 간단하지만 더 효율적인 대안이 존재하는지에 대한 의문이 제기됩니다.

대체 접근 방식:

겹치는 날짜 간격을 병합하는 대안 접근 방식이 제안되었습니다. 관련 포럼 스레드의 사용자에 의해. 이 방법은 조인과 조건부 논리의 조합을 활용하여 원하는 결과를 얻습니다.

SELECT 
       s1.StartDate,
       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 
로그인 후 복사

설명:

이 접근 방식은 다음과 같이 작동합니다.

  • 먼저 테이블 자체를 조인하여 겹치는 쌍을 식별합니다.
  • 그런 다음 다른 간격과 겹치는 간격을 필터링하는 조건을 적용합니다.
  • 다음으로 필터링되지 않은 다른 간격과 겹치는 간격을 제거합니다.
  • 마지막으로 , 시작 날짜별로 간격을 그룹화하고 각 간격의 최소 종료 날짜를 계산합니다. 그룹.

이점:

  • 이 접근 방식을 사용하면 반복적인 업데이트가 필요하지 않으므로 특정 시나리오에서 더 효율적일 수 있습니다.
  • 입력 순서에 관계없이 일관된 결과를 생성합니다.

예:

원래 질문에 제공된 동일한 예시 데이터를 사용하면 다음과 같은 결과가 얻어집니다.

StartDate EndDate
2010-01-01 2010-06-13
2010-06-15 2010-06-25
2010-06-26 2010-08-16
2010-11-01 2010-12-31

결론:

제시된 대안 접근 방식은 다음을 제공합니다. 겹치는 날짜 간격을 병합하는 효율적인 방법입니다. 조인과 조건부 논리의 조합을 활용하여 원하는 결과를 얻으며 반복적 접근 방식에 대한 실행 가능한 대안을 제공합니다.

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

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