You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用InfluxQL统计InfluxDB中变量值为True的持续时长?

用InfluxQL统计布尔值为True的总持续时长

需求说明

给定包含time和running(布尔类型)字段的数据集,需计算running值为True的所有连续时间段的总时长,示例数据的期望结果为1小时(50分钟+10分钟)。

实现查询语句

SELECT SUM(duration) / 3600 AS "Duration True: h" FROM (
  SELECT 
    (time - prev_time) / 1000000000 AS duration 
  FROM (
    SELECT 
      time, 
      running, 
      LAG(time) OVER (ORDER BY time) AS prev_time, 
      LAG(running) OVER (ORDER BY time) AS prev_running 
    FROM "your_measurement"
    -- 可根据需要调整时间范围,若查询全量数据可删除此行
    WHERE time >= '2022-09-16T00:00:00Z' AND time <= '2022-09-16T23:59:59Z'
  ) t
  WHERE (running = false AND prev_running = true)
)

逻辑解释

  1. 内层子查询:使用LAG()窗口函数,为每条记录获取上一条数据的时间(prev_time)和running状态(prev_running),按时间顺序排序。
  2. 中间子查询:筛选出running从True切换为False的行,计算当前时间与上一条时间的差值(InfluxDB时间以纳秒存储,除以1e9转换为秒),得到该段True状态的持续时长。
  3. 外层查询:将所有符合条件的时长求和,再除以3600转换为小时单位,得到总时长。

结果验证

针对示例数据,查询会计算两段True区间的时长:

  • 2022-09-16 09:10:00到2022-09-16 10:00:00:3000秒(50分钟)
  • 2022-09-16 12:00:00到2022-09-16 12:10:00:600秒(10分钟)
    总和为3600秒,转换后即为1小时,符合期望结果。

内容的提问来源于stack exchange,提问作者mmmmgggg

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 23:35:22