【问题标题】:InfluxDB elapsed time based on a specific valueInfluxDB 经过时间基于特定值
【发布时间】:2020-03-19 08:56:40
【问题描述】:

刚接触 InfluxDB。

我有一个监控的 IO 信号,每次更改时,InfluxDB 都会记录其时间戳。数据如下:

time                   value
----                   -----
2020-03-19 06:02:50    0
2020-03-19 06:01:28    1.00
2020-03-19 03:25:58    0  
2020-03-19 03:22:38    1.00
2020-03-18 23:07:47    0
2020-03-18 23:06:47    1.00
2020-03-18 21:14:47    0
2020-03-18 21:12:45    1.00
2020-03-18 21:11:23    0
2020-03-18 21:09:41    1.00
2020-03-18 21:07:30    0
...

现在我想获取 value = 1 ONLY 的经过时间(这意味着开关打开的经过时间)

首先我尝试了SELECT elapsed("value")/3600/1000000000 FROM "MyMeasurement",然后我得到了一个这样的系列:

time                   elapsed
----                   -----
2020-03-19 06:02:50    0.02
2020-03-19 06:01:28    2.59
2020-03-19 03:25:58    0.06
2020-03-19 03:22:38    4.25
2020-03-18 23:07:47    0.02
2020-03-18 23:06:47    1.87
2020-03-18 21:14:47    0.03
2020-03-18 21:12:45    0.02
2020-03-18 21:11:23    0.03
2020-03-18 21:09:41    0.04
2020-03-18 21:07:30    0.02
...

如何将系列缩小到我关注的那些 [0.02, 0.06, 0.02, 0.03, 0.03, 0.02 ...]?我必须在 InfluxDB 查询命令中执行此操作,因为我将其弹出到 Grafana 面板上。谁能帮我解决这个问题?

【问题讨论】:

    标签: grafana influxdb influxql


    【解决方案1】:

    您可以使用嵌套查询。试试这样的

    SELECT elap FROM
          (SELECT difference("value") as diff, elapsed("value") as elap FROM "MyMeasurement")
    WHERE diff > 0
    

    如果“value”中的值始终只有 0 和 1,那么连续值之间的差值将是 1 或 -1。您可以将其用作过滤器,仅针对您想要的记录获取 elapsed。 (不确定是否必须取 1 或 -1,只需检查)

    PS:我感觉我已经在 StackOverflow 上回答了类似的问题,但找不到。

    【讨论】:

    • 非常感谢,这个脚本完全解决了我的问题,无需进一步修改
    猜你喜欢
    • 1970-01-01
    • 2020-12-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-16
    • 2021-07-07
    • 2014-02-21
    • 1970-01-01
    相关资源
    最近更新 更多