我有一个InfluxDB度量,其中包含一个包含0或1的字段。
如何找到给定值的最长不间断运行?
想象一下,这个字段表示太阳是否升起,我有一年的数据。我希望查询找到最长的1的不间断运行,这将代表一年中最长的一天,并返回类似“23 6月5am到23 6月9 9pm”的内容。(我在北半球,完全虚构了这些时间,但希望你能理解。)
发布于 2017-11-28 09:34:23
我不认为用InfluxQL可以做到这一点。在许多关系数据库管理系统中,可以在单个SQL查询using window functions and grouping中执行类似操作。
我已经尝试了几种方法,但从1.3版开始,我认为InfluxQL的表现力还不足以完成这项任务。限制包括:
DIFFERENCE,但不能像处理普通标记或字段值那样对其进行操作。例如,it's not possible to take the FIRST(time) of a group of measurements.GROUP BY time或tag,而不是按字段值(或从子查询结果派生的值)。此外,当按时间分组时,选择器functions.ORDER BY time.仅返回组间隔时间戳
因此,做到这一点的最佳方法是在应用程序级别。
编辑:对于记录,我能得到的最接近的结果是使用ELAPSED查找后续0值之间的最长间隔。如果您的数据模型是一个特定的形状,并且数据以固定的时间间隔传入,则这可能适用于您:
SELECT TOP(elapsed, N) AS elapsed FROM (SELECT ELAPSED(field) FROM measurement WHERE field != 1)返回,例如当N=1时:
time elapsed
---- -------
2000 500但是,不能保证间隙中的值为1。使用FIRST检索间隙内字段为== 1的第一个测量值,如果没有,则不检索:
SELECT FIRST(field) FROM measurement WHERE field = 1 AND time < 2000 and time > (2000 - 500)返回,例如:
time first
---- -----
1000 1因此,1值的最长运行时间是1000 -> 2000。
https://stackoverflow.com/questions/47501039
复制相似问题