Sql 如何按唯一的时间跨度获取记录计数?

Sql 如何按唯一的时间跨度获取记录计数?,sql,Sql,我有一个表,有一系列的开始日期和结束日期,我试图找出有多少独特的会话存在,换句话说,有多少不同的时间段不重叠 因此,如果表格如下所示: 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

我有一个表,有一系列的开始日期和结束日期,我试图找出有多少独特的会话存在,换句话说,有多少不同的时间段不重叠

因此,如果表格如下所示:

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个会话的计数?

试试这个。返回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) )

你是如何决定保留A而不是B的?没关系,我只想返回一个计数。因此,如果一个查询可以告诉我有3个唯一的会话,我不介意它是否排除a或B。另外,如果两个时间跨度重叠,但不完全包含?假设B是12:30-15:00。它与A重叠,但两者都不完全包含另一个。你们想在结果集中两者都不想要,只想要一个吗?是什么让A唯一而B不唯一?我假设他们两人都将被排除在统计之外,因为他们重叠,因此都不是unique@JNK,根据他最初的描述,听起来完全匹配不算重叠,因为他把D&E计算为单独的结果。有人想用样本表解释对工作答案的否决票吗?这似乎通过了我所有的讨论tests@JNK我运行了一些测试用例,不明白为什么这个不能与你的公式一起工作——我把它看作是一个会话,但它返回为2。我以为我可以编辑你的陈述来处理这个案子,但显然我比我想象的还要弱。。。值'J','1/1/11 14:01','1/1/11 14:03','K','1/1/11 14:02','1/1/11 14:03','L','1/1/11 14:02','1/1/11 14:04'@sXe-如果您查看3个部分重叠,则此代码可能不起作用。这是一个更复杂的关系。@JNK-你肯定回答了我的问题,正如我所问的,所以再次感谢