InfluxDB - 获取查询中的最后一个值

时间:2015-03-22 11:40:59

标签: influxdb

是否可以只查询查询结果的最后一个值(或第n个值)?

例如,在查询中:

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

是否可以只获取最后一个值,即更远的时间值(可能是第1000个元素)?

当然我可以全部检索它们然后跳到最后一个,但我不想以这种方式浪费带宽。

7 个答案:

答案 0 :(得分:15)

如果您使用InfluxDB 0.8,如果您没有 GROUP BY ,请不要使用 FIRST() LAST(),因为其很慢 :(

因此,如果您想获得这些值,请使用:

第一价值:

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

最后价值:

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

不要删除GROUP BY *因为那时你可能会得到意想不到的值。

答案 1 :(得分:13)

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秒的片段分割序列,并为每个片段选取最新的值。

答案 2 :(得分:6)

在API中,查看第一个/最后一个以选择列的第一个或最后一个记录。 您还可以在顶部/底部选择多个记录

[edit] top / bottom似乎返回时间范围的最高/最低值

答案 3 :(得分:2)

SELECT * FROM <SERIES> ORDER BY ASC LIMIT 1

答案 4 :(得分: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>

您在LIMIT中看到GROUP BY子句是[可选]。

关于LIMIT和SLIMIT用法的详细说明,这里是version 1.5 document。 以下是关于SLIMIT的ongoing issue

答案 5 :(得分:0)

这是一个具体的示例,假设我们有数据:

> 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

,您想获取最后两列(每个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 

以及grafana上的可视化,它将始终显示每个标签的最新记录 enter image description here

答案 6 :(得分:0)

如果和我一样,您正在寻找相同的功能,但使用 DSL(influx 2)。

您可以使用tail函数https://docs.influxdata.com/influxdb/v2.0/reference/flux/stdlib/built-in/transformations/tail/

last 函数对我不起作用。