InfluxDB v1.8使用MAX选择器构造子查询的异常问题咨询
问题根因
InfluxDB 1.8的InfluxQL语法不支持在WHERE子句的等值判断右侧直接使用标量子查询,你编写的语句不符合1.x版本的语法规范,不属于逻辑错误。
可行实现方案
方案1:两步查询(最稳妥,适配性最高)
先单独执行最大值查询拿到最新月份数值:
SELECT MAX(field_month) AS max_month FROM infos
将查询得到的数值(例如示例中的9)直接代入原本可正常运行的统计语句即可,这种方案适合脚本调用场景,改动量极小且性能最优。
方案2:单语句兼容写法
如果需要用单条语句完成查询,可将过滤逻辑放入内层子查询,利用InfluxQL对FROM后嵌套子查询的支持实现需求:
SELECT COUNT(field_month) FROM ( SELECT field_month, tag_month, tag_week FROM infos ) WHERE field_month = (SELECT MAX(field_month) FROM infos) GROUP BY tag_month, tag_week
只要你的field_month为数值类型,和示例数据结构一致即可正常运行。
方案3:性能优化补充
如果数据量较大,可以在子查询中新增原生time字段的范围过滤,先限定扫描最近2个月的数据,再做统计逻辑,可大幅降低数据扫描量。
内容的提问来源于stack exchange,提问作者Arthur de Bortoli
相关产品推荐
相关产品推荐

