InfluxDb查询返回给定时间范围内的记录数



我使用时间序列分析,并使用inflowdb绘制有趣的图形。

这里是用例

我正在建立一个物联网项目来监控我的桌面植物。每当湿度下降到10%时,我就触发打开泵并在influxdb上记录该活动。每次泵关闭,另一个活动被注册。

这是行协议中被保存的点

activities,action=pump,sensor=628cfbddf5d8735e30504021,controller=61dd1bfa47e99385a55d4853,org=61c06a2adcfa254dda756796,service=61c06a7edcfa254dda756799,type=on count=1i 1653406685616

activities,action=pump,sensor=628cfbddf5d8735e30504021,controller=61dd1bfa47e99385a55d4853,org=61c06a2adcfa254dda756796,service=61c06a7edcfa254dda756799,type=off count=1i 1653406871246

如您所见,我有几个id作为标签存储,只有count=1存储在字段中。

这就是挑战

我想画一个no的图。在过去的30天里,泵每天被切换VS次。我试了几种方法,但都没能找到解决这个问题的方法。

我真的希望这种用例是可能实现的。谢谢你

您可以尝试以下查询:

SELECT COUNT("count")/2 FROM "your_measurement" 
WHERE time >= '20XX-XX-XXT00:00:00Z' AND time <= '20XX-XX-XXT23:59:29Z' 
GROUP BY time(24h)

查询返回count字段键中非空字段值的数量,并将其除以一半(假设每个打开的开关大致都有一个关闭的开关)。它涵盖了20XX-XX-XXT00:00:00Z到20XX-XX-XXT23:59:29Z之间的时间范围,并将结果按24小时间隔和每个标签进行分组。

如果你需要精确的开关,那么你可以更新上面的查询:

SELECT COUNT("count")/2 FROM "your_measurement" 
WHERE time >= '20XX-XX-XXT00:00:00Z' AND time <= '20XX-XX-XXT23:59:29Z'
AND type='on'
GROUP BY time(24h)

类似于开关关闭情况:

SELECT COUNT("count")/2 FROM "your_measurement" 
WHERE time >= '20XX-XX-XXT00:00:00Z' AND time <= '20XX-XX-XXT23:59:29Z'
AND type='off'
GROUP BY time(24h)

点击此处查看详细信息。

最新更新