我有两列:[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)的经验。
答案 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