如何在Apache IoTDB中按时间分组查询不同设备同测点的聚合值?
Apache IoTDB按时间戳分组计算多设备测点总和
场景说明
你的原始数据:
Time 1, Device 1.Measuring point;
Time 1, Device 2.Measuring point;
Time 2, Device 1.Measuring point;
Time 2, Device 2.Measuring point
需求是按Time 1、Time 2分组,计算同一时间戳下两个设备测点的数值之和。
解决方案
GROUP BY LEVEL是用于设备层级的聚合逻辑,不适合你的时间分组需求,应该使用**GROUP BY TIME**子句实现按时间戳分组聚合。
核心SQL命令
假设数据存储路径为root.Device1和root.Device2,测点名为MeasuringPoint,执行以下语句:
SELECT sum(*) FROM root.Device1.MeasuringPoint, root.Device2.MeasuringPoint GROUP BY TIME;
如果需要限定只计算指定时间戳(比如Time1和Time2)的结果,添加WHERE条件:
SELECT sum(*) FROM root.Device1.MeasuringPoint, root.Device2.MeasuringPoint WHERE time = '你的Time1时间字符串' OR time = '你的Time2时间字符串' GROUP BY TIME;
命令解释
sum(*):对同一时间戳下所有选中的测点值求和GROUP BY TIME:按原始数据的时间戳分组,每个时间戳对应一条聚合结果- 确保
FROM子句正确包含所有需要聚合的测点全路径
另外,也可以用对齐查询直接计算求和结果,效果一致:
SELECT (Device1.MeasuringPoint + Device2.MeasuringPoint) AS total_sum FROM root.Device1, root.Device2 ALIGN BY TIME;
ALIGN BY TIME会自动对齐同一时间戳的多设备数据,直接输出每个时间戳的求和值。
内容的提问来源于stack exchange,提问作者Thoreau I
相关产品推荐
相关产品推荐

