【问题标题】:Get last stored value at a given time in influxDB在influxDB中获取给定时间最后存储的值
【发布时间】:2019-05-25 14:24:41
【问题描述】:

我将温度传感器的值存储在 influxDB 数据库中,我正在寻找特殊要求。 当温度变化达到某个阈值时,每个传感器都会发送感测数据,这意味着所有传感器不会同时发送数据。 所以传感器 1,即S1 将在瞬间t1 发送值 1 (S1_v1)。然后S2 将在t2 发送S2_v2S3t3 发送S3_v3,等等。 我想在给定时间获得所有传感器的值t,这样在t2S1 的返回值将是S1_v1(最后存储的一个)。

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

【问题讨论】:

    标签: influxdb


    【解决方案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 行。

    【讨论】:

    • 非常感谢。实际上,我想要一个请求,在其中指定一个特定的时间戳并获取此时所有最后存储的值。不提供时间范围。你认为这可能吗?
    • 是的。不要在过滤器语句中给它一个范围,只做WHERE time &lt;= t。其中t 是您的时间价值。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多