我希望我的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
如何进行我想要的查询?
答案 0 :(得分:0)
InfluxDB不支持IN
。您将不得不使用2个单独的查询来实现您的目标。首先,运行内部查询以获取address
值。之后,使用OR
动态生成第二个查询,或者只获取特定时间段内的所有事件,并使用第一个查询的结果进行过滤。
答案 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