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

如何查询指定错误工单发生前后1小时内的所有故障工单?

解决方案:获取特定错误工单前后1小时的所有记录

当然可行!你的需求完全可以实现,问题出在当前代码的关联逻辑上——你用INCIDENT_ID关联临时表和原表,这只会返回临时表里那些错误工单本身,而不是它们时间窗口内的所有工单。

修正后的查询思路

我们可以直接通过时间范围关联来实现:先找出今年以来所有包含目标错误的工单的时间,然后筛选原表中落在这些时间前后1小时内的所有记录。

方法1:使用 EXISTS 子查询

这种方式逻辑清晰,容易理解:

SELECT i.*
FROM Incident i
WHERE EXISTS (
    SELECT 1
    FROM Incident t
    WHERE t.INCIDENT_REPORTED_DATE_TIME > '2018-01-01'
      AND t.SUMMARY LIKE '%error%' -- 替换成你要匹配的错误关键词,比如'%xyz%'
      AND i.INCIDENT_REPORTED_DATE_TIME >= DATEADD(HH, -1, t.INCIDENT_REPORTED_DATE_TIME)
      AND i.INCIDENT_REPORTED_DATE_TIME < DATEADD(HH, 1, t.INCIDENT_REPORTED_DATE_TIME)
)
ORDER BY i.INCIDENT_REPORTED_DATE_TIME;

方法2:使用 JOIN 关联时间范围

如果你更习惯用JOIN的写法,也可以这样写(注意加DISTINCT避免重复记录,因为一个工单可能落在多个错误工单的时间窗口内):

SELECT DISTINCT i.*
FROM Incident i
JOIN Incident t 
  ON i.INCIDENT_REPORTED_DATE_TIME >= DATEADD(HH, -1, t.INCIDENT_REPORTED_DATE_TIME)
  AND i.INCIDENT_REPORTED_DATE_TIME < DATEADD(HH, 1, t.INCIDENT_REPORTED_DATE_TIME)
WHERE t.INCIDENT_REPORTED_DATE_TIME > '2018-01-01'
  AND t.SUMMARY LIKE '%error%'
ORDER BY i.INCIDENT_REPORTED_DATE_TIME;

关键说明

  • 把'%error%'替换成你实际要匹配的错误关键词,比如'%xyz%',确保精准定位目标故障工单。
  • 时间条件> '2018-01-01'可以改成动态写法DATEFROMPARTS(YEAR(GETDATE()), 1, 1),避免硬编码年份,每年自动生效。
  • 方法2中的DISTINCT很重要:如果一个工单同时落在多个错误工单的1小时窗口内,会被多次匹配,去重后才能得到唯一的记录。

这样就能返回今年以来,所有目标错误工单发生前后1小时内的所有故障工单啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 04:03:11