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

SQL Server中统计机器超过5分钟的总停机时长

统计SQL Server中机器的总停机时长

核心实现方案

要计算机器的总停机时长(定义为连续生产记录间隔超过5分钟的时间段总和),可以结合**窗口函数LEAD()**和DATEDIFF()来实现,具体步骤如下:

  • 用LEAD()获取每条生产记录的下一条记录时间
  • 计算两条记录的时间差,筛选出超过5分钟的间隔
  • 累加符合条件的间隔时长,得到总停机时间

完整SQL代码

-- 请替换以下占位符为你的实际字段/值:
-- MachineId:机器标识字段名
-- '你的机器ID':目标机器的具体标识
SELECT 
    SUM(DATEDIFF(MINUTE, curr_dt, next_dt)) AS TotalDowntimeMinutes
FROM (
    SELECT 
        DateTime AS curr_dt,
        -- 按时间升序,获取下一条生产记录的时间
        LEAD(DateTime) OVER (ORDER BY DateTime ASC) AS next_dt
    FROM AutomatedEquipment
    -- 过滤目标机器的生产记录
    WHERE MachineId = '你的机器ID'
    -- 可选:添加时间范围过滤,比如统计某月的停机时长
    -- AND DateTime BETWEEN '2024-01-01 00:00:00' AND '2024-01-31 23:59:59'
) AS IntervalData
-- 只统计间隔超过5分钟的停机时段
WHERE DATEDIFF(MINUTE, curr_dt, next_dt) > 5;

代码说明

  • LEAD(DateTime) OVER (ORDER BY DateTime ASC):窗口函数会按时间顺序,为每条记录匹配到下一条生产记录的时间,这是实现"行与下一行对比"的关键。
  • DATEDIFF(MINUTE, curr_dt, next_dt):计算两条记录的时间差(单位:分钟),完全适配你对时长统计的需求。如果需要转换为小时/秒,只需调整DATEDIFF的第一个参数(如HOUR/SECOND)。
  • SUM():累加所有超过5分钟的间隔时长,得到总停机分钟数。

修正你原有代码的问题

你原来的WHERE DateTime = ''存在两处错误:

  • DateTime是日期时间类型,不能与空字符串做等值判断
  • 必须添加机器标识过滤条件,确保只统计目标机器的生产记录

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 13:44:51