給定開始日期和結束日期,我需要計算這兩個日期之間的實例。所以給出如下:SQL邏輯問題和跨應用查詢
表:
Col 1 Start_Date End_Date
1 01/01/2010 02/01/2010
2 01/01/2010 04/01/2010
3 03/01/2010 04/01/2010
4 03/01/2010 04/01/2010
如果我是第一次(01/01)和2號(02/01),我希望的2.數之間尋找。如果我一直在尋找對於第3到第4我會期望3的計數。如果我正在查看整個日期範圍,那麼我會期望計數爲4。有道理?
注意:日期已轉換爲午夜,無需添加任何代碼。另外,在這個問題中,日期的格式爲dd/MM/yyyy格式。
目前我有類似下面的東西:
SELECT COUNT(*), Group_Field
FROM MY_Table
WHERE Start_Date < DATEADD(DAY, 1, @StartDate) AND End_Date > @EndDate
GROUP BY Group_Field
我沒有在某個時候認爲這是正確的,但現在我不相信......
我以前確實有:
WITH Dates AS (
SELECT [Date] = @StartDate
UNION ALL SELECT [Date] = DATEADD(DAY, 1, [Date])
FROM Dates WHERE [Date] < @EndDate
)
SELECT COUNT(*), Group_Field -- In this case it is [Date]
FROM MY_Table
CROSS APPLY Dates
WHERE Start_Date < DATEADD(DAY, 1, @StartDate) AND End_Date > [Date]
GROUP BY Group_Field
但我不知道,我現在用CROSS在這種情況下正確應用...
問題:
1)我是否在第二個示例(以及CTE)中使用Cross Apply?
2)如果是這樣,哪個邏輯是正確的? (我認爲這是第二個)
/討論:)
感謝您的信息,但它不是解決辦法:(反正Upvoted :) – 2011-06-16 12:49:06