2011-12-02 2 views
1

일련의 시작 날짜와 종료 날짜가있는 테이블이 있는데, 얼마나 많은 고유 한 세션이 있는지 즉, 겹치지 않는 고유 한 기간이 몇 개인 지 파악하려고합니다.고유 한 시간 범위로 레코드 수를 계산하는 방법은 무엇입니까?

그래서 테이블은 다음과 같다 경우 :

ID | StartTime | EndTime 
A | 1/1/11 12:00 | 1/1/11 14:00 
B | 1/1/11 12:30 | 1/1/11 15:00 
C | 1/1/11 14:30 | 1/1/11 15:30 
D | 1/1/11 16:00 | 1/1/11 16:30 
E | 1/1/11 16:30 | 1/1/11 17:00 

레코드 A, B 및 C 중복 이후 3 개 세션의 수를 쿼리의 종류를 반환?

+0

B 대신 A를 유지하기로 어떻게 결정합니까? – JNK

+0

그것은 중요하지 않습니다, 내가 돌려 주길 바란 것은 모두 카운트입니다. 따라서 쿼리가 3 개의 고유 한 세션이 있다고 말할 수 있다면 A 또는 B를 제외하면 문제가되지 않습니다. – sXe

+0

또한 두 시간 범위가 겹치지 만 완전히 포함되지 않으면 어떻게됩니까? B가 12:30 - 15:00이라고 말합니다. A와 겹치지 만 다른 하나는 완전히 포함되지 않습니다. 둘 다 원 하시겠습니까? 결과 집합에 하나도 없습니까? – king14nyr

답변

2

시도해보십시오. SQL Server 2008에서 올바른 수를 반환합니다.

DECLARE @t table (id char(1), Starttime smalldatetime, endtime smalldatetime) 

INSERT INTO @t 
VALUES 
('A','1/1/11 12:00','1/1/11 14:00'), 
('B','1/1/11 12:30','1/1/11 15:00'), 
('C','1/1/11 14:30','1/1/11 15:30'), 
('D','1/1/11 16:00','1/1/11 16:30'), 
('E','1/1/11 16:30','1/1/11 17:00') 


select 
    count(t.id) 
from 
    @t t 
WHERE NOT EXISTS ( SELECT 1 FROM @t t2 
        WHERE (t.starttime > t2.starttime 
        AND t.endtime < t2.starttime) 
        OR (t.starttime < t2.starttime 
        AND t.endtime > t2.starttime)) 
+1

샘플 테이블을 사용하여 작동하는 응답에 대해 downvote를 설명하는 사람은 누구입니까? – JNK

+0

이것은 내 테스트 모두를 통과 한 것 같습니다 – msmucker0527

+0

완벽하게 작동하며 답변은 매우 간단하게 작성되었습니다 - 감사합니다 !!! – sXe

관련 문제