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:00
到1900-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)
归档时间: |
|
查看次数: |
31797 次 |
最近记录: |