2013-06-13 31 views
3

我被卡住開發一個查詢。每個日期的事件總數

我有一個表,結構是這樣的:

[EventId] [Description] [EventName] [ValidFrom] [ValidTo] [Approved] 
1   Sample1  1stEvent  2013-01-27 2013-05-10  1 
2   Sample2  2stEvent  2013-04-07 2013-06-15  1 
3   Sample3  3stEvent  2013-04-07 2013-06-15  1 
4   Sample4  4stEvent  2013-03-02 2013-05-29  1 
5   Sample5  5stEvent  2013-05-17 2013-07-10  1 
6   Sample6  6stEvent  2013-03-20 2013-05-11  1 

我要的是一個日期範圍內的每個日期,包括事件的總數。

Select distinct 
    Convert(varchar,ValidFrom,101)as [Date], 
    case 
     when count(EventID)>1 then Convert(nvarchar, count(EventID)) +' Events' 
     else Convert(nvarchar, count(EventID)) + ' Event' 
     end as CountOf, 
    Row_Number() 
     over (Order By Convert(varchar,ValidFrom,101)) as RowNumber 
from [Table] 
where Approved=1 
group by Convert(varchar,ValidFrom,101) 

這是查詢我已經來了,直至現在,但是這顯示了在特定日期的事件的總數,而不包括其被繼續按照從有效和有效的日期之間的日期的事件。

+0

您能提供預期的結果嗎?不知道我明白你想要完成什麼。 – sgeddes

+0

所以你要根據EventId計算總和嗎? –

+0

我同意@sgeddes。您應該提供您希望在結果集中看到的幾個示例輸出行。 – STLDeveloper

回答

1

這樣做:

declare @dateFrom date 
declare @dateTo date 
SET @dateFrom = '20130101' 
SET @dateTo = '20130501' 
;with cte as(Select @dateFrom AS EveryDay 
      UNION ALL 
      Select dateadd(dd, 1, EveryDay) FROM cte WHERE EveryDay < @dateTo) 
SELECT 
EveryDay, 
COUNT(DISTINCT [EventName]) AS NoEvents 
from cte LEFT JOIN Table1 ON ValidFrom <= EveryDay AND ValidTo >= EveryDay 
GROUP BY EveryDay 
OPTION (MAXRECURSION 0) 

SQL Fiddle

+0

嘿cha,你能分享輸出結果嗎? –

+0

我提供了SQL小提琴供您玩。當你點擊'運行SQL'按鈕時,你會看到結果 – cha

+0

ahhh tnx它的工作沒有它,但有一件事更多,上述查詢不包括Approved = 1條件,這是服務不明確的結果 –

0

此代碼示例不完整 - 您需要輸入需要顯示和聚合的字段。這聽起來像你正在尋找一個在兩個日期之間的結果,而你在查詢中沒有。我不確定我是否完全明白你的問題。

DECLARE @pStartDate DATE 
DECLARE @pEndDate DATE 

SET @pStartDate = [enter your start date for the date range] 
SET @pEndDate = [enter your end date for the date range] 

SELECT 
    COUNT(EventId), 
    ValidFrom, 
    ValidTo 
FROM [Table] 
WHERE 
    ValidFrom >= @pStartDate 
    AND ValidTo <= @pEndDate 
    AND Approved = 1 
GROUP BY 
    ValidFrom, 
    ValidTo 
+0

嗯,是的,我知道它不完整,這就是爲什麼要建議任何方式來實現,以及我有一個日曆控件,它代表活動事件上的總事件,上面的查詢只顯示基於只有特定日期這是不希望 –

0

隨着我所提到的上述查詢給出的結果是這樣的: -

Date CountOf RowNumber 
01/27/2013 2 Events 1 
03/02/2013 1 Event   2 
04/07/2013 2 Events 3 
05/17/2013 1 Event   4 

正如你可以看到我得到的總的事件僅在所不希望特定日期的基礎。

我想要顯示的結果就像從2013年1月27日有效2013年1月27日生效,這意味着在日期= 2013-03-02的情況下,事件應該增加1或該日期活躍的事件數量,所以2013-03-02的結果應該是6個事件,我希望我可以呈現更好的圖片,但由於它的複雜性,它使我變得空白:(

0
SELECT t1.EventId,t1.Description,t1.EventName,t1.ValidFrom,t1.ValidTo,t1.Approved,SUM(TotalEvent) FROM 
    (SELECT EventId,Description,EventName,ValidFrom,ValidTo,Approved,COUNT(EventId) as Total 
    FROM TABLE 
    WHERE Approved='1' AND ValidFrom >=(DATE) AND ValidTO<=(DATE) 
    GROUP BY EventId,Description,EventName,ValidFrom,ValidTo,Approved) AS t1 
    LEFT JOIN 
    (SELECT EventId, COUNT(EventId) as TotalEvent 
    FROM TABLE 
    WHERE ValidFrom >=(DATE) AND ValidTO<=(DATE)) AS t2 
    ON t1.EventId=t2.EventId 
    Group by t1.EventId,t1.Description,t1.EventName,t1.ValidFrom,t1.ValidTo,t1.Approved 

希望這有助於你

+0

WHERE ValidFrom> =(日期)和ValidTO <=(DATE))爲T2 LEFT JOIN 我猜你在這裏失去了一些東西的同時運行其給我的錯誤 t1.EventId = t2.EventId Group by t1.EventId,t1.Description,t1.EventName,t1.ValidFrom,t1.ValidTo,t1 。已批准 –

+0

已更新。現在登錄 –

+0

試過了,它沒有排 –

相關問題