2014-08-27 66 views
0

我有2列:[StartDT]和[EndDT],它們是日期時間格式像這樣:二零一四年五月二十零日12:45:18.383總和爲每半小時

我需要得到的東西按每半小時[StartDT]和[EndDT]之差的總和計算。所以我的輸出基本上每一行都是特定1/2期間差異的總和,如:00:00 - 34秒,下一行:00:30 - 23秒。

我能夠創建代碼這樣做一次,它看起來像這樣:

SELECT sum(DATEDIFF (s , [StartDT] , [EndDT])) as SumTotal 
FROM [Radio].[dbo].[Sheet1] 
WHERE DATEPART(DAY, StartDT) = 1 and DATEPART(HOUR, StartDT) between 0 and 1 and DATEPART(MI, StartDT) between 0 and 30; 

的代碼將看看錶,發現在第一天的第一個小時的前30分鐘內。現在我怎麼會自動化這遍歷整個表。我知道我會如何在C中完成這項工作,但是我對SQL和Common Table Expressions(CTE)沒有太多的經驗。

+1

這裏我的選擇是一個維度表...創建一個表名爲dim_time或東西的程度和每30分鐘間隔填充你想報告。你可以交叉加入一個日期列表,並且每個日子都有一個48小時30分鐘的表格。然後使用該表作爲查詢的起點。 – Twelfth 2014-08-27 18:53:11

回答

1

訣竅是計算你HalfHour值,然後GROUP BY - 嘗試:

SELECT dateadd(mi, (datediff(mi, 0, StartDT)/30) * 30, 0) as HalfHour 
     , sum(DATEDIFF (s , [StartDT] , [EndDT])) as SumTotal 
FROM Radio.dbo.Sheet1 
GROUP BY dateadd(mi, (datediff(mi, 0, StartDT)/30) * 30, 0) 
ORDER BY 1