如何使用InfluxDB Flux查询获取每个分组的最新一条记录
问题原因
- 首先你的Filter语句存在语法错误:
or判断逻辑被写在了filter的fn参数闭包外面,末尾还有多余的方括号,实际执行时筛选逻辑不符合预期,甚至可能直接抛出语法异常。 - 其次
last()函数默认会对当前所有返回结果取最新的1条数据,没有按城市做分组的情况下,自然只会返回所有匹配数据里时间最近的1条,拿不到两个城市各自的最新记录。
正确查询语句
from(bucket: "population") |> range(start: -7d) // 修正filter语法,将两个城市的判断逻辑都放在fn闭包内 |> filter(fn: (r) => r["city"] == "New York" or r["city"] == "Los Angeles") // 按城市字段分组,后续聚合操作会对每个分组独立执行 |> group(columns: ["city"]) // 每个城市分组单独取最新的1条数据 |> last() // 如果不需要保持分组结构,可加下面这行解除分组,不需要可以删除 |> group()
补充说明
- 如果需要查询所有存储了数据的城市最新记录,只需要删掉上面filter行的城市判断条件即可,分组、取last的逻辑不变。
range的时间范围可以根据你的数据实际存储周期调整,只要保证能覆盖到所有目标城市的最新数据点即可。
内容的提问来源于stack exchange,提问作者Unplug
相关产品推荐
相关产品推荐

