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 

, какой запрос будет возвращать счетчик 3-х сеансов, так как записи A, B и C пересекаются?

+0

Как вы решили сохранить A вместо B? – 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

Кто-нибудь хочет объяснить нижний предел по рабочему ответу с образцовой таблицей? – JNK

+0

Это, кажется, проходит все мои тесты – msmucker0527

+0

Это работает отлично, и ответ был очень просто написан - спасибо !!! – sXe

Смежные вопросы