我有一个具有以下架构的表,我需要定义一个查询,该查询可以根据时间间隔(例如每分钟记录数)对数据进行分组,然后提供自上一组以来对 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
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 中整数除法的结果是整数。以下是将接受的答案翻译成PostgreSQL(我选择 2000 年 1 月 1 日作为基准日期。如果您的数据早于该日期,请将其更改为更早的日期):
我对那里的第三个例子有点困惑,这应该是 1325 吗?根据捕获快照值总和的要求,下面的查询应该得到你想要的。