SQL Server每半小时总计一次

时间:2014-08-21 20:14:33

标签: sql-server

我有两列:[StartDT]和[EndDT],它们是日期时间格式,如:2014-05-20 12:45:18.383

我需要做两件事:(1)将[StartDT]和[EndDT]之间的差异(在毫秒级别)提取为“差异”和(2)在1/2小时取“差异”的总和间隔。

对于(1)我有:

DATEDIFF ( MS , [StartDT] , [EndDT] ) [Difference]

并且可以通过创建新列并在其中插入差异来正常工作,但是如何每隔半小时获取“差异”总和并以1/2小时的间隔为这些结果创建“总和”列?所以我真的不需要'差异'列,而是需要一个'Sum'列,但不知道从哪里开始。

2 个答案:

答案 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求和并将其插入表中。然后设置一个每隔半小时运行存储过程的作业。