我有一个包含一系列开始日期和结束日期的表,我正在试图找出存在多少个唯一会话 - 换句话说,有多少不同的时间段不重叠。
所以如果表格如下:
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 :(得分: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) )