WHERE 句を使用して、フィールド、タグ、またはタイムスタンプに基づいてデータをフィルタリングできます。
構文
SELECT_clause FROM_clause WHERE <conditional_expression> [(AND|OR) <conditional_expression> [...]][構文の説明]
WHERE 句は、フィールド、タグ、またはタイムスタンプの条件式をサポートしています。
[フィールド]
field_key <operator> ['string' | boolean | float | integer]WHERE 句は、フィールド値の比較をサポートしています。フィールド値は、文字列、ブール値、浮動小数点数、または整数です。
文字列型のフィールド値は、単一引用記号(')で囲む必要があります。単一引用記号(')を使用しない場合、または二重引用記号(")を使用した場合、結果は返されず、エラーメッセージも返されません。次の表に、サポートされている演算子を示します。
| 演算子 | 説明 |
| = | 等しい |
| <> | 等しくない |
| != | 等しくない |
| > | より大きい |
| >= | 以上 |
| < | より小さい |
| <= | 以下 |
算術演算子と正規表現もサポートされています。
[タグ]
tag_key <operator> ['tag_value']タグ値は単一引用記号(')で囲みます。単一引用記号(')を使用しない場合、または二重引用記号(")を使用した場合、結果は返されず、エラーメッセージも返されません。次の表に、サポートされている演算子を示します。
| 演算子 | 説明 |
| = | 等しい |
| <> | 等しくない |
| != | 等しくない |
正規表現もサポートされています。
[タイムスタンプ]
ほとんどの SELECT ステートメントでは、デフォルトの時間範囲は 1677-09-21 00:12:43.145224194 UTC から 2262-04-11T23:47:16.854775806Z UTC です。GROUP BY time() 句を含む SELECT ステートメントでは、デフォルトの時間範囲は 1677-09-21 00:12:43.145224194 UTC から現在までです。
例
> SELECT * FROM "h2o_feet" WHERE "water_level" > 8
name: h2o_feet
--------------
time level description location water_level
2015-08-18T00:00:00Z between 6 and 9 feet coyote_creek 8.12
2015-08-18T00:06:00Z between 6 and 9 feet coyote_creek 8.005
[...]
2015-09-18T00:12:00Z between 6 and 9 feet coyote_creek 8.189
2015-09-18T00:18:00Z between 6 and 9 feet coyote_creek 8.084h2o_feet メジャーメントのデータポイントがクエリされます。データポイントは、water_level フィールドの値が 8 より大きいという条件を満たしています。
文字列型のフィールド値が指定された条件を満たすデータポイントをクエリする
> SELECT * FROM "h2o_feet" WHERE "level description" = 'below 3 feet'
name: h2o_feet
--------------
time level description location water_level
2015-08-18T00:00:00Z below 3 feet santa_monica 2.064
2015-08-18T00:06:00Z below 3 feet santa_monica 2.116
[...]
2015-09-18T14:06:00Z below 3 feet santa_monica 2.999
2015-09-18T14:36:00Z below 3 feet santa_monica 2.907h2o_feet メジャーメントのデータポイントがクエリされます。データポイントは、level description フィールドの値が below 3 feet であるという条件を満たしています。文字列型のフィールド値は、単一引用記号(')で囲む必要があります。
フィールド値が指定された条件を満たすデータポイントをクエリする(WHERE 句に算術演算子が含まれている)
> SELECT * FROM "h2o_feet" WHERE "water_level" + 2 > 11.9
name: h2o_feet
--------------
time level description location water_level
2015-08-29T07:06:00Z at or greater than 9 feet coyote_creek 9.902
2015-08-29T07:12:00Z at or greater than 9 feet coyote_creek 9.938
2015-08-29T07:18:00Z at or greater than 9 feet coyote_creek 9.957
2015-08-29T07:24:00Z at or greater than 9 feet coyote_creek 9.964
2015-08-29T07:30:00Z at or greater than 9 feet coyote_creek 9.954
2015-08-29T07:36:00Z at or greater than 9 feet coyote_creek 9.941
2015-08-29T07:42:00Z at or greater than 9 feet coyote_creek 9.925
2015-08-29T07:48:00Z at or greater than 9 feet coyote_creek 9.902
2015-09-02T23:30:00Z at or greater than 9 feet coyote_creek 9.902h2o_feet メジャーメントのデータポイントがクエリされます。データポイントは、water_level フィールドの値に 2 を加算すると、合計値が 11.9 より大きくなるという条件を満たしています。算術演算子の標準的な優先順位が適用されます。詳細については、「InfluxQL 算術演算子」のトピックをご参照ください。
タグ値が指定された条件を満たすデータポイントをクエリする
> SELECT "water_level" FROM "h2o_feet" WHERE "location" = 'santa_monica'
name: h2o_feet
--------------
time water_level
2015-08-18T00:00:00Z 2.064
2015-08-18T00:06:00Z 2.116
[...]
2015-09-18T21:36:00Z 5.066
2015-09-18T21:42:00Z 4.938h2o_feet メジャーメントのデータポイントがクエリされます。データポイントは、location タグの値が santa_monica であるという条件を満たしています。文字列型のフィールド値は、単一引用記号(')で囲む必要があります。
フィールド値とタグ値が同時に指定された条件を満たすデータポイントをクエリする
> SELECT "water_level" FROM "h2o_feet" WHERE "location" <> 'santa_monica' AND ("water_level" < -0.59 OR "water_level" > 9.95)
name: h2o_feet
--------------
time water_level
2015-08-29T07:18:00Z 9.957
2015-08-29T07:24:00Z 9.964
2015-08-29T07:30:00Z 9.954
2015-08-29T14:30:00Z -0.61
2015-08-29T14:36:00Z -0.591
2015-08-30T15:18:00Z -0.594h2o_feet メジャーメントのデータポイントがクエリされます。データポイントは、location タグの値が santa_monica ではなく、water_level フィールドの値が -0.59 より小さいか、9.95 より大きいという条件を満たしています。WHERE 句は、AND 演算子と OR 演算子をサポートしています。これらの 2 つの演算子は、括弧()を使用して論理的に区切ることができます。
タイムスタンプが指定された条件を満たすデータポイントをクエリする
> SELECT * FROM "h2o_feet" WHERE time > now() - 7dh2o_feet メジャーメントのデータポイントがクエリされます。データポイントは、タイムスタンプが過去 7 日間に生成されたという条件を満たしています。WHERE 句でサポートされているタイムスタンプ構文の詳細については、「時間の構文」のトピックをご参照ください。
WHERE 句に関する FAQ
結果が返されない場合、エラーのトラブルシューティングを行うにはどうすればいいですか?
文字列型のタグ値またはフィールド値が単一引用記号(')で囲まれているかどうかを確認します。単一引用記号(')を使用しない場合、または二重引用記号(")を使用した場合、結果は返されず、エラーメッセージも返されません。
次のコードブロックは、3 つのステートメントを示しています。最初の 2 つのステートメントでは、santa_monica タグ値が単一引用記号(')で囲まれていないか、二重引用記号(")で囲まれています。この場合、結果は返されません。3 番目のステートメントでは、santa_monica タグ値が単一引用記号(')で囲まれています。この場合、結果は返されます。
> SELECT "water_level" FROM "h2o_feet" WHERE "location" = santa_monica
> SELECT "water_level" FROM "h2o_feet" WHERE "location" = "santa_monica"
> SELECT "water_level" FROM "h2o_feet" WHERE "location" = 'santa_monica'
name: h2o_feet
--------------
time water_level
2015-08-18T00:00:00Z 2.064
[...]
2015-09-18T21:42:00Z 4.938次のコードブロックは、3 つのステートメントを示しています。最初の 2 つのステートメントでは、文字列型のフィールド値が単一引用記号(')で囲まれていないか、二重引用記号(")で囲まれています。最初のステートメントでは、フィールド値にスペースが含まれているため、エラーメッセージが返されます。2 番目のステートメントでは、結果は返されません。3 番目のステートメントでは、フィールド値が単一引用記号(')で囲まれています。この場合、結果は返されます。
> SELECT "level description" FROM "h2o_feet" WHERE "level description" = at or greater than 9 feet
ERR: error parsing query: found than, expected ; at line 1, char 86
> SELECT "level description" FROM "h2o_feet" WHERE "level description" = "at or greater than 9 feet"
> SELECT "level description" FROM "h2o_feet" WHERE "level description" = 'at or greater than 9 feet'
name: h2o_feet
--------------
time level description
2015-08-26T04:00:00Z at or greater than 9 feet
[...]
2015-09-15T22:42:00Z at or greater than 9 feet