InfluxDB 基于特定值的运行时间

InfluxDB elapsed time based on a specific value

刚刚接触 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 的经过时间(这意味着开关打开的经过时间)

首先我尝试了 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 面板上。有人可以帮我解决这个问题吗?

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

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: 我感觉我已经在 Whosebug 上回答过类似的问题,但找不到它。