2013-06-18 53 views
1

我有一個表格,其中包含以下信息,這是一個更大的數據集(約100k行)的一個小子集。每行是一個傳入請求,我正在嘗試做的是獲取正確的查詢使我能夠使用開始時間將折線圖中的數據顯示爲每小時的總請求數。並非所有小時都存在於數據集中,但仍需要表示爲0.最終目標是在谷歌可視化折線圖上顯示。按小時計算的SQL /實體框架組數據

ID Duration Store Start     End      MacID 
    7 31   1  2013-06-08 07:46:10.000 2013-06-08 08:17:00.000 8532 
    4 2   1  2013-06-08 18:42:53.000 2013-06-08 18:44:06.000 8530 
    2 1   1  2013-06-08 14:31:20.000 2013-06-08 14:32:08.000 8529  
    11 213   1  2013-06-08 12:43:55.000 2013-06-08 16:16:11.000 8534 
    6 585   1  2013-06-08 14:03:58.000 2013-06-08 23:48:44.000 8531 
    28 287   1  2013-06-08 07:15:40.000 2013-06-08 12:02:10.000 8542 

最終的格式必須是

['Hour', 'Total'], 
    ['00', 1000 ], 
    ['01', 1170 ], 
    ['02', 0], 
    ['03', 1030] 

我使用SQL 2012和Entity Framework。我已經嘗試過以下查詢

SELECT CAST(start as date) AS ForDate, 
     DATEPART(hour,start) AS OnHour, 
     COUNT(*) AS Totals 
from (
SELECT * from visits 
GROUP BY CAST(start as date), 
     DATEPART(hour,start) 

但是,它只會帶回有數據小時的結果。什麼是獲取數據的最佳方式? SQL或實體框架,我將如何去解決它?

+0

類似問題:http://stackoverflow.com/q/17086120/861716。最好的選擇是填寫內存中的空閒時間。 –

+0

是的,這是有道理的,但是如何將查詢分組在數據中,保持原樣?或者用EF做它會更好? – Deza

+0

可能使用EF,所以您可以更靈活地從C#源代碼中修改它。 –

回答

0

你可以試試這個,

visits.Where(u=> u.Start != null).GroupBy(u => u.Start.GetValueOrDefault().Hour).Select(g => new { OnHour = g.Key, Totals = g.Count() }) 

和SQL查詢;

SELECT COUNT(*) AS [Totals], [t1].[value] AS [OnHour] 
FROM (
    SELECT DATEPART(Day, COALESCE([t0].[LASTCONNECTIONTIME],'1.1.0001 00:00:00')) AS [value], [t0].[Start] 
    FROM [visits] AS [t0] 
    ) AS [t1] 
WHERE [t1].[Start] IS NOT NULL 
GROUP BY [t1].[value]