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

InfluxDB查询实现:统计指定时间段每日水泵触发次数

问题解答

这个需求完全可以实现,你的数据存储结构已经满足统计要求,核心逻辑是过滤出所有水泵开启事件,按自然日窗口聚合计数即可。

Flux 查询(适用于InfluxDB 2.x / InfluxDB Cloud)

将查询中占位的桶名替换为你实际使用的存储桶名称即可直接使用:

from(bucket: "替换为你的实际bucket名称")
  |> range(start: -30d)
  |> filter(fn: (r) => r._measurement == "activities")
  |> filter(fn: (r) => r.action == "pump" and r.type == "on")
  |> filter(fn: (r) => r._field == "count")
  |> aggregateWindow(every: 1d, fn: sum, createEmpty: true)
  |> yield(name: "daily_pump_on_count")

查询说明

  • 过滤逻辑只保留action=pump且type=on的记录,自动排除水泵关闭事件、其他设备的活动记录
  • 按1天为窗口做聚合,由于每条开启记录的count字段值固定为1,窗口内sum结果就是当日水泵开启总次数
  • createEmpty: true参数会自动给没有水泵开启记录的日期填充0值,适配折线图、柱状图的连续时间轴展示,不需要的话可以改为false
  • 如果需要按传感器、控制器维度分别统计每日开启次数,在filter语句后添加|> group(columns: ["sensor"])即可,括号内填入需要分组的tag名
  • 若统计结果时间和本地时区不匹配,东八区用户可在aggregateWindow前添加|> timeShift(duration: 8h, columns: ["_time"])调整时区

InfluxQL 查询(适用于InfluxDB 1.x版本)

SELECT count("count") AS daily_pump_on_count
FROM activities
WHERE action = 'pump' AND type = 'on'
  AND time > now() - 30d
GROUP BY time(1d) FILL(0)

查询说明

  • GROUP BY time(1d)指定按1天粒度切分时间窗口,count函数统计每个窗口内的开启事件总数
  • FILL(0)会将无开启记录的日期值填充为0,不需要可直接删除该子句
  • 东八区用户可在GROUP BY time(1d)后添加, tz('Asia/Shanghai')修正时区偏差

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 20:48:13