每半小时总和总计

时间:2014-08-27 18:32:03

标签: sql sql-server-2008

我有两列:[StartDT]和[EndDT],它们是日期时间格式,如:2014-05-20 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获得子查询或公用表表达式(CTE)的经验。

1 个答案:

答案 0 :(得分: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