【问题标题】:Return values that are the same in two intervals - problems with SELECT ... IN ()返回两个区间内相同的值 - SELECT ... IN () 的问题
【发布时间】:2017-10-29 21:30:46
【问题描述】:

我希望我的 InfluxDB 从 probes_address 返回两个间隔内相同的 address 值。

这是我的查询:

SELECT *
FROM "probes_address"
WHERE TIME >= 1509262992757ms
  AND TIME <= 1509286166260ms
  AND "address" IN
    (SELECT "address"
     FROM "probes_address"
     WHERE TIME >= 1509291526184ms
       AND TIME <= 1509308535996ms)

InfluxDB 返回:

error parsing query: found IN, expected ; at line 1, char 104

如何进行我想要的查询?

【问题讨论】:

    标签: influxdb


    【解决方案1】:

    InfluxDB 不支持IN。您将不得不使用 2 个单独的查询来实现您想要的。首先,运行内部查询以获取 address 值。之后,要么使用OR动态生成第二个查询,要么只获取某个时间段的所有事件并使用第一个查询的结果进行过滤。

    You'll find relevant documentation here.

    【讨论】:

    • 那么,我不能只使用查询来实现我想要的吗?
    • 如果“仅查询”是指 1 个查询或 2 个查询,它们看起来总是相同的 - 那么不是。第二个查询(您的示例中的外部查询)将根据第一个(内部)查询的结果而改变,因为您只能使用OR。或许你能想出一个不同的方法?
    【解决方案2】:

    InfluxQL 非常有限,不支持 IN 运算符,也不支持 where 子句中的嵌套查询,也不支持许多其他方便的 SQL 构造。

    您可以在from 子句中使用子查询来获取任一时间间隔内的匹配地址。然后,在外部查询中,您可以过滤在第一个间隔中具有最短时间而在另一个间隔中具有最长时间的那些。

    我无法测试它,但想法是这样的:

    SELECT * 
    FROM   (
            SELECT "address", MIN(TIME) AS "mintime", MAX(TIME) AS "maxtime"
            FROM   "probes_address"
            WHERE  (TIME >= 1509262992757ms AND TIME <= 1509286166260ms)
               OR  (TIME >= 1509291526184ms AND TIME <= 1509308535996ms)
            GROUP BY "address"
           )
    WHERE  "mintime" <= 1509286166260ms AND "maxtime" >= 1509291526184ms 
    

    【讨论】:

    • error parsing query: mixing multiple selector functions with tags or fields is not supported
    • 为什么 InfluxQL 如此有限? :(
    猜你喜欢
    • 2014-01-09
    • 1970-01-01
    • 2018-10-06
    • 1970-01-01
    • 2017-06-10
    • 2020-04-10
    • 2016-05-13
    • 1970-01-01
    • 2012-01-14
    相关资源
    最近更新 更多