根据时间间隔对记录进行分组

Joe*_*eky 14 sql-server-2008 query t-sql

我有一个具有以下架构的表,我需要定义一个查询,该查询可以根据时间间隔(例如每分钟记录)对数据进行分组,然后提供自上一组以来对 SnapShotValue 的更改总和。目前,SnapShotValue 总是递增,所以我只需要差异的总和。任何人都可以帮助使用可能执行此操作的 SQL Server T-SQL 查询吗?我愿意更改架构,但这是我目前拥有的。

架构

CaptureTime   (datetime)
SnapShotValue (int)
Run Code Online (Sandbox Code Playgroud)

样本数据

1 Jan 2012 00:00:00,   100
1 Jan 2012 00:00:30,   125
1 Jan 2012 00:01:00,   200
1 Jan 2012 00:01:30,   300
1 Jan 2012 00:02:15,   400
1 Jan 2012 00:02:30,   425
1 Jan 2012 00:02:59,   500
Run Code Online (Sandbox Code Playgroud)

所需查询结果

1 Jan 2012 00:01:00,   225 -- Sum of all captured data changes up to the 1 minute mark
1 Jan 2012 00:02:00,   500 -- Sum of all captured data changes up to the 2 minute mark
1 Jan 2012 00:03:00,   125 -- Sum of all captured data changes up to the 3 minute mark
Run Code Online (Sandbox Code Playgroud)

Mik*_*son 19

select dateadd(minute, 1+datediff(minute, 0, CaptureTime), 0),
       sum(SnapShotValue)
from YourTable
group by dateadd(minute, 1+datediff(minute, 0, CaptureTime), 0)
Run Code Online (Sandbox Code Playgroud)

数据

datediff(minute, 0, CaptureTime)为您提供自 以来的分钟数1900-01-01T00:00:00

dateadd(minute, 1+datediff(minute, 0, CaptureTime), 0)将自此以来的分钟数添加1900-01-01T00:00:001900-01-01T00:00:00只有分钟的日期时间。

1+是因为你想要下一分钟。

要以 5 分钟的间隔执行相同的操作,您需要进行一些计算。将分钟除以5和乘以5得到四舍五入到 5 分钟精度的分钟数。这是有效的,因为 SQL Server 中整数除法的结果是一个整数。

dateadd(minute, 5 + (datediff(minute, 0, CaptureTime) / 5) * 5, 0)
Run Code Online (Sandbox Code Playgroud)