返回两个区间内相同的值 - SELECT ... IN()

时间:2017-10-29 21:30:47

标签: influxdb

我希望我的InfluxDB能够从address返回两个时间间隔相同的probes_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

如何进行我想要的查询?

2 个答案:

答案 0 :(得分:0)

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

You'll find relevant documentation here.

答案 1 :(得分:0)

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