我有两列:[StartDT]和[EndDT],它们是日期时间格式,如:2014-05-20 12:45:18.383
我需要做两件事:(1)将[StartDT]和[EndDT]之间的差异(在毫秒级别)提取为“差异”和(2)在1/2小时取“差异”的总和间隔。
对于(1)我有:
DATEDIFF ( MS , [StartDT] , [EndDT] ) [Difference]
并且可以通过创建新列并在其中插入差异来正常工作,但是如何每隔半小时获取“差异”总和并以1/2小时的间隔为这些结果创建“总和”列?所以我真的不需要'差异'列,而是需要一个'Sum'列,但不知道从哪里开始。
答案 0 :(得分:1)
;WITH
intervals AS (
SELECT
DATEADD(minute,30*ROW_NUMBER() OVER(ORDER BY (SELECT 1)),0) [interval]
FROM master.dbo.spt_values t1, master.dbo.spt_values t2
)
,running_totals AS (
SELECT
[EndDT]
,SUM(DATEDIFF(MS,[StartDT],[EndDT])) OVER(ORDER BY [EndDt]) [rt_Difference]
FROM MyTable
)
SELECT
[interval]
,[rt_Difference]
FROM [intervals] i
CROSS APPLY (
SELECT TOP (1)
[rt_Difference]
FROM running_totals
WHERE [EndDt] <= [interval]
ORDER BY [EndDt] DESC
) d
答案 1 :(得分:0)
创建一个存储过程,对您的datediff求和并将其插入表中。然后设置一个每隔半小时运行存储过程的作业。