web-dev-qa-db-fra.com

InfluxDB - Obtenir seulement la dernière valeur dans la requête

Est-il possible d'interroger uniquement la dernière valeur (ou la n-ième valeur) des résultats d'une requête?

Par exemple, dans la requête:

SELECT value FROM response_times WHERE time > now() - 1h limit 1000;

Est-il possible d’obtenir uniquement la dernière valeur, c’est-à-dire celle la plus éloignée dans le temps (éventuellement le 1000 e élément)?

Bien sûr, je peux tout récupérer, puis passer au dernier, mais je ne veux pas gaspiller de la bande passante de cette façon.

12
dukebody

Dans l'API, regardez en premier/dernier pour sélectionner le premier ou le dernier enregistrement d'une colonne. Vous avez également le haut/bas pour sélectionner plus d’un enregistrement

[edit] top/bottom semblent renvoyer les valeurs les plus élevées/les plus basses de la période

6
Pi Home Server
SELECT last(value) FROM response_times WHERE time > now() - 1h;

Cela devrait renvoyer la dernière valeur de la colonne.

Cependant, si vous le souhaitez, vous pouvez diviser la séquence en plusieurs parties et sélectionner la dernière valeur. Par exemple:

 SELECT last(value) FROM response_times WHERE time > now() - 1h GROUP BY time(60s);

Il divisera la séquence en fragments de 60 secondes et récupérera pour chaque fragment la dernière valeur.

12
Molina

Si vous utilisez InfluxDB 0.8, n'utilisez pas FIRST () ou LAST () si vous n'avez pas GROUP BY car c'est très lent :(

Donc, si vous voulez obtenir les valeurs que vous devriez utiliser:

Première valeur:

SELECT * FROM <SERIES> GROUP BY * ORDER BY ASC LIMIT 1

Dernière valeur:

SELECT * FROM <SERIES> GROUP BY * ORDER BY DESC LIMIT 1

Ne supprimez pas GROUP BY * car il est alors possible que vous obteniez des valeurs inattendues.

12
archos
SELECT * FROM <SERIES> ORDER BY ASC LIMIT 1
2
IsaacE

Il n'y a pas de bug ou de problème à propos de LIMIT. Oui, il y en a un, mais il s'agit de SLIMIT (Series Limit). LIMIT peut être utilisé en toute sécurité pour obtenir les premiers n enregistrements.

En bref, la syntaxe de LIMIT:

SELECT_clause [INTO_clause] FROM_clause [WHERE_clause] [GROUP_BY_clause] [ORDER_BY_clause] LIMIT <N>

la syntaxe pour SLIMIT:

SELECT_clause [INTO_clause] FROM_clause [WHERE_clause] GROUP BY *[,time(<time_interval>)] [ORDER_BY_clause] SLIMIT <N>

Vous voyez que la clause GROUP BY est [facultatif] dans LIMIT.

Pour des explications détaillées sur les utilisations de LIMIT et SLIMIT, voici version 1.5 document } _. Et voici le numéro en cours à propos de SLIMIT.

0
stratovarius