按移位的DATETIME字段分组,按ID分组PIVOT

问题描述

我正在使用带模式的表(简化):

CREATE TABLE [Test]
(
  CaptureTime DATETIME,SnapShotValue INT,Id INT
);

具有以下30分钟的数据:

30 minute data

我想计算每个HH:00小时数据的平均值,取HH:30和HH + 1:00值并将其PIVOT。对于上面的测试数据:

Dest data view

我要开始here,如何将值HH:00的时间分组?数据取值HH:30和HH + 1:00以及Pivot?谢谢!

解决方法

如果我正确地跟随了您,则可以将捕获时间偏移30分钟,然后删除这些分钟,最后进行条件聚合:

select dateadd(minute,- datepart(minute,v.capturetime),v.capturetime) capture_time,avg(case when id = 1 then 1.0 * snapshotvalue end) avg1,avg(case when id = 2 then 1.0 * snapshotvalue end) avg2
from test t
cross apply (values (dateadd(minute,- 30,capturetime))) v(capturetime)
group by dateadd(minute,v.capturetime) 

Demo on DB Fiddle