Sql-Server-2008
根據時間間隔對記錄進行分組
我有一個具有以下架構的表,我需要定義一個查詢,該查詢可以根據時間間隔(例如每分鐘記錄數)對數據進行分組,然後提供自上一組以來對 SnapShotValue 的更改總和。目前,SnapShotValue 總是遞增,所以我只需要差的總和。任何人都可以幫助執行可能執行此操作的 SQL Server T-SQL 查詢嗎?我願意更改架構,但這是我目前擁有的。
架構
CaptureTime (datetime) SnapShotValue (int)
樣本數據
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
期望的查詢結果
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
select dateadd(minute, 1+datediff(minute, 0, CaptureTime), 0), sum(SnapShotValue) from YourTable group by dateadd(minute, 1+datediff(minute, 0, CaptureTime), 0)
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)