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

指定团队近7天工单创建/关闭统计SQL查询问题咨询

工单统计问题修正方案

需求说明

需统计指定团队(如abc团队)近7天的以下数据:

  • 团队整体的创建工单量与关闭工单量
  • 该团队下成员各自的创建、关闭工单数据

样例数据

创建日期创建工单量关闭工单量团队
6-03-202397abc
7-03-202388abc
8-03-202379abc
9-03-2023108abc
10-03-20231510abc

现有代码问题分析

你提供的SQL中ClosedCases统计错误,原因是:

  • WHERE子句仅筛选了创建时间在近7天的工单,导致COUNT(CASE WHEN caseentity.statecode=1 THEN 1 END)统计的是「近7天创建且已关闭」的工单,而非需求中的「近7天关闭」的工单,统计范围完全不符。

关于你提到的写法可行性

你问的case when cast(c1.CreatedOn as date) between cast(DATEADD(DAY,-7,GETDATE()) as date) and (c1.StateCode) then COUNT(*) end写法不可行,因为:

  • StateCode是状态标识(比如1代表关闭),属于数值类型,不能和日期类型做范围比较,这种写法会触发语法或逻辑错误,完全不符合统计逻辑。

修正后的SQL代码

假设工单表filteredIncident存在closedon字段(记录工单关闭时间),以下代码可同时统计团队整体及成员的近7天工单数据:

SELECT
    al.Name AS [Team Name],
    ak.FullName AS [Member Name],
    -- 统计近7天创建的工单量
    COUNT(CASE WHEN CAST(caseentity.createdon AS DATE) >= DATEADD(DAY, -7, GETDATE()) THEN 1 END) AS [CreatedCases],
    -- 统计近7天关闭的工单量(需statecode=1且关闭时间在近7天)
    COUNT(CASE WHEN CAST(caseentity.closedon AS DATE) >= DATEADD(DAY, -7, GETDATE()) AND caseentity.statecode = 1 THEN 1 END) AS [ClosedCases]
FROM filteredIncident AS caseentity
JOIN systemuser ak ON ak.systemuserid = caseentity.owninguser
JOIN teammembership tm ON tm.systemuserid = ak.systemuserid
JOIN team al ON al.teamid = tm.teamid
WHERE al.Name = 'abc'
GROUP BY al.Name, ak.FullName
-- 若需额外生成团队汇总行,可添加 WITH ROLLUP
-- GROUP BY al.Name, ak.FullName WITH ROLLUP

代码说明

  1. 用条件聚合替代WHERE子句的单一筛选,分别判断创建时间、关闭时间是否在近7天,确保两个统计维度的独立性。
  2. GROUP BY同时包含团队名称和成员名称,可输出每个成员的明细数据;若仅需团队汇总,可去掉ak.FullName并调整GROUP BY。
  3. 必须依赖closedon字段来判断工单是否在近7天关闭,若表中无此字段,需关联状态变更日志表获取关闭时间。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 19:35:03