Sql-Server-2008

根據時間間隔對記錄進行分組

  • March 20, 2019

我有一個具有以下架構的表,我需要定義一個查詢,該查詢可以根據時間間隔(例如每分鐘記錄數)對數據進行分組,然後提供自上一組以來對 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)

SE-數據

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)

引用自:https://dba.stackexchange.com/questions/17669