我甚至不确定如何说出这个问题。我有一个关于事件开始和结束时间的视图。我想知道有多少并发事件。在过去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'
这非常难看,但似乎有效。有更清洁(或更快)的方法吗?我这样做太难了吗?
答案 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