2014-08-27 68 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