SQL根据重叠时间选择

时间:2011-05-24 19:26:23

标签: tsql

我甚至不确定如何说出这个问题。我有一个关于事件开始和结束时间的视图。我想知道有多少并发事件。在过去7天的含义,同时发生了多少事件,通常是什么时间。

SELECT dateCreated, dateEnded, ( SELECT COUNT(*) 
                                 FROM vw_LeadTime vw2 
                                 WHERE vw2.dateCreated >= vw.dateCreated 
                                 AND vw2.dateCreated <= vw.dateEnded )
                                 AS CountInTimePeriod
FROM vw_LeadTime vw
WHERE vw.dateEnded IS NOT NULL  
AND vw.dateCreated > '5/17/2011'

这非常难看,但似乎有效。有更清洁(或更快)的方法吗?我这样做太难了吗?

1 个答案:

答案 0 :(得分:2)

您当前的sql仅选择在另一个事件期间启动的事件。你错过了在另一个事件之前开始但在其中或之后结束的事件。 更正确的是:

SELECT dateCreated, dateEnded, ( SELECT COUNT(*) 
                                 FROM vw_LeadTime vw2 
                                 WHERE vw2.dateEnded >= vw.dateCreated 
                                 AND vw2.dateCreated <= vw.dateEnded )
                                 AS CountInTimePeriod
FROM vw_LeadTime vw
WHERE vw.dateEnded IS NOT NULL  
AND vw.dateCreated > '5/17/2011'

通常,A<=D AND B>=C

时,两个时段A-B和C-D重叠