InfluxDB计算信号开启多长时间 [英] InfluxDB calculate for how long was a signal switched on
本文介绍了InfluxDB计算信号开启多长时间的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我有一些boolean
类型值的测量值,我想计算信号在特定时间段内处于true
状态的时间。
例如:
日期时间 | 状态 |
---|---|
01.01.2021 01:00 | True |
01.01.2021 04:00 | True |
01.01.2021 05:30 | FALSE |
02.01.2021 23:00 | True |
03.01.2021 01:30 | FALSE |
05.01.2021 06:00 | True |
应转换为:
日期时间 | 持续时间(%1小时) |
---|---|
01.01.2021 | 4.5 |
02.01.2021 | 1 |
03.01.2021 | 1.5 |
04.01.2021 | 0 |
05.01.2021 | 18 |
我知道influx
有返回后续记录之间的时间的ELAPSED
函数,但这似乎对我没有任何帮助。我也用flux
试过,但也碰到了障碍(那只是出于学术目的,我需要用InfluxQL)。
我已经找到this,但解决方案是使用INTEGRAL
(这要求您的值为0或1,而不是布尔值,甚至有人没有获得正确的值)并切换到Timescale DB。
这让我大吃一惊,涌入仍然不支持这一点,它似乎是涌入所用于的那种数据的最常见用例之一。
如果有人有任何我可能遗漏的信息或想法,我将非常感激。
推荐答案
设法使某些内容正常工作,但为此,您需要能够使用1和0而不是布尔值,以便您可以将INTEGRAL
函数与子查询结合使用。
SELECT INTEGRAL(value, 1h) as "integral_1h" FROM
(SELECT MEAN(value) AS
"value" FROM your_series_name WHERE (time >= '2021-01-
01T00:00:00+00:00'
AND time < '2021-01-06T00:00:00+00:00') GROUP BY time(1s)
fill(previous))
WHERE (time >= '2021-01-01T00:00:00+00:00' AND time < '2021-01-
06T00:00:00+00:00') GROUP BY time(1d) fill(null) ORDER BY time ASC;
这篇关于InfluxDB计算信号开启多长时间的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文