0

刚接触 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 面板上。有人可以帮我吗?

4

1 回答 1

1

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

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

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

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

于 2020-03-19T12:45:21.113 回答