我有一个表,每几秒钟存储一个传感器的温度读数
示例数据如下所示
nId nOperationId strDeviceIp nIfIndex nValue nTimestamp
97 2 192.168.99.252 1 26502328 1593828551
158 2 192.168.99.252 1 26501704 1593828667
256 2 192.168.99.252 1 26501860 1593828788
354 2 192.168.99.250 1 26501704 1593828908
452 2 192.168.99.250 1 26501692 1593829029
我想得到每个设备的平均温度,所以我运行了以下查询
select strDeviceIp, AVG(CAST(nValue as bigint)) as val1
from myTable
where nOperationId = 2 and nTimestamp >= 1593828600 and nTimestamp <= 1593838600
group by strSwitchIp;
在那里我可以通过我想要的时间范围。
我的问题是,这给了我总平均值,但我想要的步骤或范围,我想实现,而不是一行,我会得到一个范围内的所有值/步骤,比如说5分钟作为一行。
p、 我想展示一个图表。
运行以下查询
strSwitchIp average
192.168.99.252 26501731
但我想
strSwitchIp average timestamp
192.168.99.252 26201731 1593828600
192.168.99.252 26532731 1593828900
192.168.99.252 24501721 1593829200
192.168.99.252 26506531 1593829500
在本例中,我希望每300秒为每个设备获取一行。
2条答案
按热度按时间lvmkulzt1#
自从你的
nTimestamp
是秒数,您只需将它添加到GROUP BY
. 除以300得到300秒(5分钟)的间隔。在sql server中/
是整数除法,它丢弃小数部分。1593828667 / 300 = 5312762.2233333333333333333333333
discard fractional part
1593828667 / 300 = 5312762
5312762 * 300 = 1593828600
uurity8g2#
您可以这样使用分区: