首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在InfluxDB中找到某一值的最长游程

问如何在InfluxDB中找到某一值的最长游程
EN

Stack Overflow用户
提问于 2017-11-27 05:07:30
回答 1查看 104关注 0票数 1

我有一个InfluxDB度量,其中包含一个包含0或1的字段。

如何找到给定值的最长不间断运行?

想象一下,这个字段表示太阳是否升起,我有一年的数据。我希望查询找到最长的1的不间断运行,这将代表一年中最长的一天,并返回类似“23 6月5am到23 6月9 9pm”的内容。(我在北半球,完全虚构了这些时间,但希望你能理解。)

EN

回答 1

Stack Overflow用户

发布于 2017-11-28 09:34:23

我不认为用InfluxQL可以做到这一点。在许多关系数据库管理系统中,可以在单个SQL查询using window functions and grouping中执行类似操作。

我已经尝试了几种方法,但从1.3版开始,我认为InfluxQL的表现力还不足以完成这项任务。限制包括:

  1. No window functions (虽然有些函数表现出类似的行为,例如DIFFERENCE,但不能像处理普通标记或字段值那样对其进行操作。例如,it's not possible to take the FIRST(time) of a group of measurements.
  2. Can GROUP BY time或tag,而不是按字段值(或从子查询结果派生的值)。此外,当按时间分组时,选择器functions.
  3. Can only ORDER BY time.

仅返回组间隔时间戳

因此,做到这一点的最佳方法是在应用程序级别。

编辑:对于记录,我能得到的最接近的结果是使用ELAPSED查找后续0值之间的最长间隔。如果您的数据模型是一个特定的形状,并且数据以固定的时间间隔传入,则这可能适用于您:

代码语言:javascript
复制
SELECT TOP(elapsed, N) AS elapsed FROM (SELECT ELAPSED(field) FROM measurement WHERE field != 1)

返回,例如当N=1时:

代码语言:javascript
复制
time  elapsed
----  -------
2000  500

但是,不能保证间隙中的值为1。使用FIRST检索间隙内字段为== 1的第一个测量值,如果没有,则不检索:

代码语言:javascript
复制
SELECT FIRST(field) FROM measurement WHERE field = 1 AND time < 2000 and time > (2000 - 500)

返回,例如:

代码语言:javascript
复制
time  first
----  -----
1000  1

因此,1值的最长运行时间是1000 -> 2000。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47501039

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档