【发布时间】:2020-09-24 03:27:16
【问题描述】:
我试图以 30 分钟的间隔返回数据,但如果 30 分钟没有数据,我想取最接近 30 分钟或 0 分钟标记的值,公差为 -5 +5,如果仍然没有数据在 +5 -5 的范围内,即 55-05 或 25-35 将不会返回任何值。 目前我有一个 sql 语句,可以每隔 30 分钟返回 55-05 和 25-35 的平均值,但我现在只想要一个最接近 30 分钟的值,我可以使用 55-00 或 25-30如果 55-05 和 25-35 做不到。我现在的 sql 语句是
SELECT [target],AVG([Temperature]) as Temperature,AVG([Humidity]) As Humidity,DATEADD(minute,(datediff(minute,0,[Date Time])/30)*30,0) as [Date Time],COUNT (*)
FROM mytable
WHERE DATEPART(minute, [Date Time]) IN (0,1,2,3,4,5,25,26,27,28,29,30,31,32,33,34,35,55,56,57,58,59)
AND (CAST([Date Time] AS DATE)= '2020-09-17')
AND ([target] = '1')
GROUP BY [target],DATEADD(minute,(datediff(minute,0,[Date Time])/30)*30,0) ORDER BY [Date Time] ASC
output is
Target Temperature Humidity Date Time (No column name)
1 21.100000 76.900000 2020-09-17 00:00:00.000 2
1 21.200000 77.300000 2020-09-17 01:00:00.000 1
1 21.133333 77.333333 2020-09-17 01:30:00.000 3
1 21.100000 77.400000 2020-09-17 02:00:00.000 1
1 21.100000 77.550000 2020-09-17 02:30:00.000 2
1 21.120000 77.640000 2020-09-17 03:00:00.000 5
预期的输出应该大致相同,没有列名是 1,因为应该只返回 1 个值,唯一的变化是温度和湿度不是 25-35 和 55-05 时间范围的平均值,所以温度和湿度数据应该是最接近30分钟和0分钟标记的1
【问题讨论】:
标签: sql sql-server sql-server-2016