【问题标题】:InfluxDB v1.8: subquery using MAX selectorInfluxDB v1.8:使用 MAX 选择器的子查询
【发布时间】:2021-11-10 03:28:10
【问题描述】:

我正在使用 InfluxDB 1.8 并尝试进行比 Influx 更复杂的查询。

我想根据我的脚本存储的标签和字段值(不是 Influx 创建的默认“时间”字段)检索所有上个月存储的数据。假设我们有这个infos 测量:

time field_month field_week tag_month tag_week some_data
1631668119209113500 8 1 8 1 random
1631668119209113500 8 2 8 2 random
1631668119209113500 8 3 8 3 random
1631668119209113500 9 1 9 1 random
1631668119209113500 9 1 9 1 random
1631668119209113500 9 2 9 2 random

其中 8 是指 8 月,9 到 9 月,然后是 some_data,它存储在该月的给定周。

我可以使用MAX selectorfield_month 来存储一年中的最后一个月(不能使用Flux date package,因为我使用的是v1.8)。此外,我想要按tag_monthtag_week 分组的数据,这样我就可以COUNT 在每月的每个星期存储多少次some_data,这就是为什么在字段和标签键中重复相同的数据。类似的东西:

  1. SELECT COUNT(field_month) FROM infos WHERE field_month = 9 GROUP BY tag_month, tag_week

将 9 替换为 MAX 选择器:

  1. SELECT COUNT(field_month) FROM infos WHERE field_month = (SELECT MAX(field_month) FROM infos) GROUP BY tag_month, tag_week

第一个查询有效 (see results here),但第二个查询无效。

我做错了吗?在 v1.8 中是否有其他可能使这项工作?

注意:我知道 Influx 不应该这样使用。我已经尝试使用 PostgreSQL 轻松管理这个问题,使用上面第二个查询的改编形式。但是,当我们理顺使用 Postgres 时,我们必须使用 InfluxDB v1.8。

【问题讨论】:

    标签: sql postgresql influxdb


    【解决方案1】:

    你可以在 postgresql 中尝试:

    SELECT COUNT(field_month) FROM infos WHERE field_month = 
    (SELECT field_month FROM infos ORDER BY field_month DESC limit 1)
    GROUP BY tag_month, tag_week;
    

    【讨论】:

    • 我不知道如何在 InfluxDB 中使用限制,但我认为这可以为您提供解决方案。
    • 很好的尝试,但没有奏效。试过这个查询:SELECT COUNT(field_month) FROM infos WHERE field_month = (SELECT field_month FROM infos ORDER BY field_month DESC LIMIT 1) GROUP BY tag_month, tag_week 我的问题的第二个查询的结果是一样的,它甚至没有提示错误消息。我开始认为 Influx 不允许 WHERE 子句上的子查询。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-09-25
    • 2020-06-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多