2017-10-29 11 views
0

私はInfluxDBがaddressの値を2つの間隔で同じように返すようにしたいと思います。2つの間隔で同じ戻り値 - SELECT ... IN()の問題

これは私のクエリです:

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

InfluxDBはINをサポートしていません。あなたは、あなたが望むものを達成するために2つの別々のクエリを使用しなければなりません。まず、内部クエリを実行してaddressの値を取得します。その後、ORを使用して動的に2番目のクエリを生成するか、特定の期間からすべてのイベントを取得し、最初のクエリの結果を使用してフィルタするかのいずれかです。

You'll find relevant documentation here.

+0

だから、私はちょうどクエリを使用して欲しいものを達成することはできませんか? – Defozo

+0

「ちょうど質問」とは、1つの質問または2つの質問のいずれかを意味します。 2番目のクエリ(例の外側のクエリ)は、最初の(内側の)結果に応じて変更されます。これは、「OR」しか使用できないためです。 おそらく、あなたは別のアプローチを考え出すことができますか? – pablochan

0

InfluxQLは非常に限られており、INオペレータ、またwhere句でネストされたクエリ、また他の多くの便利なSQL構文をサポートしていません。

from句のサブクエリを使用して、どちらの間隔でも一致するアドレスを取得できます。外部問合せでは、最初の間隔で最小時間、もう1つの間隔で最大時間をフィルタすることができます。

私はそれをテストすることができませんでしたが、アイデアはこれです:

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 
+0

'エラー解析クエリ:複数のセレクタ関数をタグまたはフィールドと混合することはサポートされていません。 ' – Defozo

+0

なぜInfluxQLが制限されているのですか? :( – Defozo

関連する問題