在给定时间获取influxDB中的最后一个存储值

时间:2018-12-27 15:02:03

标签: influxdb

我正在将温度传感器的值存储在influxDB数据库中,并且正在寻找特殊的请求。 当温度以某个阈值变化时,每个传感器都会发送感测到的数据,这意味着所有传感器都不会同时发送数据。 因此,传感器1,即S1将在时刻S1_v1发送值1(t1)。然后S2将在S2_v2发送t2S3将在S3_v3发送t3,依此类推。 我想获取给定时间t上所有传感器的值,以便在t2处,S1的返回值将为S1_v1(最后存储的值)。一个)。

请问如何使用influxDB做到这一点?我希望我的要求足够明确。 非常感谢。

1 个答案:

答案 0 :(得分:1)

您可以将所有传感器数据存储到一个measurement中。

然后有一个tag呼叫名称来存储传感器的名称。

示例:

> select * from sensors;
name: sensors
time                name value
----                ---- -----
1547100000000000000 s1   500
1547200000000000000 s2   600
1547300000000000000 s3   700
1548000000000000000 s1   900
1548000000000000000 s2   800
1548000000000000000 s3   999

要在给定的时间范围t中检索所有传感器的最新存储值,可以执行以下操作;

SELECT * FROM sensors 
 WHERE time >= 1547000000000000000 and time <= 1547300000000000000
 GROUP BY "name" order by desc limit 1;

输出:

name: sensors
tags: name=s3
time                value
----                -----
1547300000000000000 700

name: sensors
tags: name=s2
time                value
----                -----
1547200000000000000 600

name: sensors
tags: name=s1
time                value
----                -----
1547100000000000000 500

上面的查询实际上是根据您的时间过滤器将所有传感器的数据分组到各个存储区中。然后ORDER BY DESC用于将它们按降序排序,以便第一行始终是时间最长的点。 Limit 1只是要求查询引擎返回前1行。