2011-06-14 42 views
3

給定開始日期和結束日期,我需要計算這兩個日期之間的實例。所以給出如下: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)如果是這樣,哪個邏輯是正確的? (我認爲這是第二個)

/討論:)

回答

0

解決方案結束了:

WHERE [Date] BETWEEN Start_Date AND DATEADD(Day, -1, End_Date) 
3

如果它應該是包容性的,使用< =和> =。

我相信任何邏輯與工作。

+0

感謝您的信息,但它不是解決辦法:(反正Upvoted :) – 2011-06-16 12:49:06