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

如何基于累积数据统计每小时燃气消耗量(InfluxDB 1.6.7+Grafana)

在Grafana中基于InfluxDB 1.6.7按小时统计燃气表消耗量(从累积值计算)

核心思路

燃气表的累积值变化量就是实际消耗量,我们需要通过InfluxQL计算每小时内累积值的总变化量,而非直接展示持续增长的累积值。

方法1:首尾值差计算(简单直接)

通过获取每个小时内的第一个和最后一个累积值,两者的差值即为该小时的消耗量,适合大多数场景。

InfluxQL查询语句

SELECT ("end" - "start") AS "hourly_consumption"
FROM (
  -- 子查询:按小时分组,提取每组的首尾累积值
  SELECT 
    first("total_consumption") AS "start", 
    last("total_consumption") AS "end"
  FROM "gas_meter" -- 替换为你的measurement名称
  WHERE $timeFilter -- Grafana内置时间变量,与面板时间范围联动
  GROUP BY time(1h), "meter_id" -- 替换为你的标签(多表时需保留)
)

异常值处理(可选)

若遇到燃气表数据回滚(极少发生),可添加判断避免出现负数:

SELECT 
  IF("end" >= "start", "end" - "start", 0) AS "hourly_consumption"
FROM (
  SELECT 
    first("total_consumption") AS "start", 
    last("total_consumption") AS "end"
  FROM "gas_meter"
  WHERE $timeFilter
  GROUP BY time(1h), "meter_id"
)

方法2:连续差值求和(精确统计)

如果需要统计每一次数据上报的变化量总和(比如中间存在多次小幅度增长),可先用difference()计算连续数据点的差值,再按小时求和。

InfluxQL查询语句

SELECT SUM("delta") AS "hourly_consumption"
FROM (
  -- 子查询:按小粒度时间分组(确保捕捉所有变化),计算连续点差值
  SELECT difference("total_consumption") AS "delta"
  FROM "gas_meter"
  WHERE $timeFilter
  GROUP BY time(1m), "meter_id" -- 时间粒度可根据数据上报频率调整
)
GROUP BY time(1h), "meter_id"

Grafana配置步骤

  1. 确认数据源为InfluxDB 1.x版本(请勿使用Flux查询模式)
  2. 新建面板(推荐选择Graph或Stat类型)
  3. 复制上述查询语句,替换对应的measurement、字段名和标签
  4. 调整面板时间范围,即可查看每小时的消耗量数据

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 14:48:21