是否可以只查询查询结果的最后一个值(或第n个值)?
例如,在查询中:
SELECT value FROM response_times WHERE time > now() - 1h limit 1000;
是否可以只获取最后一个值,即更远的时间值(可能是第1000个元素)?
当然我可以全部检索它们然后跳到最后一个,但我不想以这种方式浪费带宽。
答案 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
答案 6 :(得分:0)
如果和我一样,您正在寻找相同的功能,但使用 DSL(influx 2)。
您可以使用tail函数https://docs.influxdata.com/influxdb/v2.0/reference/flux/stdlib/built-in/transformations/tail/
last 函数对我不起作用。