在Apache IoTDB查询中添加order by报错‘the sql may be wrong’的原因及修正
Apache IoTDB查询报错'the sql may be wrong'的成因及修正方案
错误成因
你的查询语句报错的核心原因有两点:
- 多序列分组冲突:使用
root.*通配符会匹配多个时间序列,IoTDB默认按时间序列分组返回数据,直接用ORDER BY timestamp试图对全局时间戳排序,不符合默认分组逻辑,导致语法解析失败。 - 语法约束限制:未明确取消分组的情况下,IoTDB不支持跨序列的全局时间戳排序写法,
ORDER BY无法直接作用于分散在不同序列的时间戳数据。
修正方案
根据你要获取符合条件的单条数据的需求(limit 1),需添加GROUP BY ALL取消时间序列分组,让所有匹配数据合并为一个结果集后再排序。如果要取时间最晚的一条,需加上desc(默认升序会取最早的):
select CY1, CY3 from root.*.line_id.17.machine.id.1715 where timestamp < 1660268809952 group by all order by timestamp desc limit 1
补充说明
若你需要每个匹配的时间序列各取一条符合条件的数据,可改用LAST或FIRST聚合函数,无需ORDER BY:
select last(CY1), last(CY3) from root.*.line_id.17.machine.id.1715 where timestamp < 1660268809952
内容的提问来源于stack exchange,提问作者tianyi zhang
相关产品推荐
相关产品推荐

