如何在Apache IoTDB中按设备对齐查询并过滤指定设备结果?
Apache IoTDB按设备对齐查询时过滤设备的正确方式
你的问题出在过滤条件的使用时机上:原SQL中的WHERE no > 0 and no <=20是对单条数据点进行过滤,而非针对按设备聚合后的结果。即使某个设备只有部分数据点满足no的条件,它依然会出现在align by device的查询结果中,这就是为什么你仍得到数百条结果。
要实现仅保留no值在1-20之间的设备,需要使用HAVING子句对聚合后的设备结果进行过滤,修改后的SQL如下:
select LAST_VALUE(heapId) as heapId,LAST_VALUE(bunchNo) as bunchNo,LAST_VALUE(no) as no, LAST_VALUE(voltage) as voltage,LAST_VALUE(temperature) as temperature,LAST_VALUE(soc) as soc,LAST_VALUE(soh) as soh from root.station01.cell.bms795717935384768512.bunch01.** align by device HAVING no > 0 and no <=20
关键区别说明
WHERE:在按设备聚合之前,过滤掉不符合条件的单个数据点,但只要设备还有符合条件的数据点,就会被保留到最终结果中。HAVING:在按设备聚合完成后,直接过滤掉聚合结果中no不符合条件的整个设备,完全符合你只保留1-20号设备的需求。
内容的提问来源于stack exchange,提问作者Haolong Mu
相关产品推荐
相关产品推荐

