2011-05-24 28 views
2

我甚至不知道如何解釋這個問題。我已經看到一個事件的開始和結束時間。我想知道有多少個併發事件。在過去7天的意義上,同時發生了多少事件,並且通常是幾點鐘。SQL要根據重疊時間進行選擇

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' 

這是非常醜陋的,但它似乎工作。有沒有更清潔(或更快)的方法來做到這一點?我是否讓這太難了?

回答

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-B和C-d重疊時A<=D AND B>=C

+0

謝謝 - 這不是我一直在尋找,但你的答案是不是我問的問題比較好。愚蠢的錯誤。 – 2011-05-25 01:39:24