クエリの結果の最後の値(またはn番目の値)のみをクエリすることはできますか?
たとえば、クエリでは:
SELECT value FROM response_times WHERE time > now() - 1h limit 1000;
最後の値、つまり時間的にもっと前の値(おそらく1000番目の要素)のみを取得することは可能ですか?
もちろん、それらをすべて取得して最後の1つにスキップすることもできますが、この方法で帯域幅を無駄にしたくありません。
APIで、first/lastを見て、列の最初または最後のレコードを選択します。また、複数のレコードを選択するためのトップ/ボトムもあります
[編集] top/bottomは時間枠の最高値/最低値を返すようです
InfluxDB 0.8を使用している場合は、FIRST()またはLAST()を使用しないでください GROUP BYそのは非常に遅いため:(
したがって、使用するこれらの値を取得する場合は、次を使用します。
最初の値:
SELECT * FROM <SERIES> GROUP BY * ORDER BY ASC LIMIT 1
最終値:
SELECT * FROM <SERIES> GROUP BY * ORDER BY DESC LIMIT 1
GROUP BY *を削除しないでください。削除すると、予期しない値が取得される可能性があります。
SELECT last(value) FROM response_times WHERE time > now() - 1h;
これにより、列の最後の値が返されます。
ただし、必要に応じて、シーケンスを小さな断片に分割し、最後の値を選択できます。例えば:
SELECT last(value) FROM response_times WHERE time > now() - 1h GROUP BY time(60s);
シーケンスを60秒のフラグメントに分割し、フラグメントごとに最新の値を取得します。
SELECT * FROM <SERIES> ORDER BY ASC LIMIT 1
LIMITに関するバグや問題はありません。はい、ありますが、SLIMIT(シリーズ制限)についてです。 LIMITは、最初のnレコードを取得するために安全に使用できます。
要するに、LIMITの構文は次のとおりです。
SELECT_clause [INTO_clause] FROM_clause [WHERE_clause] [GROUP_BY_clause] [ORDER_BY_clause] LIMIT <N>
sLIMITの構文:
SELECT_clause [INTO_clause] FROM_clause [WHERE_clause] GROUP BY *[,time(<time_interval>)] [ORDER_BY_clause] SLIMIT <N>
GROUP BY句はLIMITで[オプション]であることがわかります。
LIMITおよびSLIMITの使用法の詳細な説明については、 バージョン1.5ドキュメント を参照してください。そして、これが 進行中の問題 SLIMITについてです。
ここに具体的なサンプルがあります。データがあると仮定します。
> select *,tag from measurement
name: measurement
time field_1 tag_1
---- ------- ------
2019-05-15T03:07:52Z 100 A
2019-05-15T03:07:52Z 101 B
2019-05-15T03:09:52Z 100 A
2019-05-15T03:09:52Z 101 B
最後の2列(tag_1ごとの最新レコード)を取得する場合は、次の操作を実行できます。
> select last(field_1),* from measurement group by *
name: measurement
tags: tag_1=A
time last field_1
---- ---- -------
2019-05-15T03:09:52Z 100 100
name: measurement
tags: tag_1=B
time last field_1
---- ---- -------
2019-05-15T03:09:52Z 101 101