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

如何统计团队成员最后处理的工单数量?修复SQL统计异常

问题分析与SQL修正

原SQL的核心问题

  1. 逻辑运算符优先级错误:WHERE子句中AND优先级高于OR,导致只有第一个成员(Ana Monteiro)的记录会校验c.status_id IN(50,60,65),其他成员的记录直接绕过状态校验,统计了非解决状态的工单。
  2. 工单归属逻辑混乱:DISTINCT ON(a.ticket_id)和GROUP BY a.ticket_id, b.name混用,会导致同一工单若被多个成员处理过,会生成多条记录,最终统计时可能重复计数,且无法确保归属到真正解决工单的成员。

修正后的SQL

SELECT vgtuser, COUNT(*) AS resolved_tickets
FROM (
    SELECT 
        b.name AS vgtuser,
        a.ticket_id,
        ROW_NUMBER() OVER (
            PARTITION BY a.ticket_id 
            ORDER BY a.updated_on DESC
        ) AS rn
    FROM ticket_messages a
    INNER JOIN admins b ON a.admin_id = b.admin_id
    INNER JOIN ticket_status_history c ON a.ticket_id = c.ticket_id
    WHERE 
        c.status_id IN(50, 60, 65)
        AND a.updated_by IN (
            'Ana Monteiro', 'Nuno Gonçalves', 'Henrique Espinha',
            'Ricardo Sousa', 'João Fernandes', 'Pedro Pereira',
            'Luis Moreno', 'Gonçalo Rodrigues', 'Nuno Coelho'
        )
) AS ranked_tickets
WHERE rn = 1 -- 只保留每个工单最新处理的记录
GROUP BY vgtuser
ORDER BY resolved_tickets DESC;

关键修正点

  • 修复逻辑条件:用IN替代多个LIKE(精确匹配场景更高效),确保成员筛选和状态校验同时生效。
  • 窗口函数锁定归属:用ROW_NUMBER()按工单分组、更新时间倒序排序,取每个工单的第一条记录(最新操作),确保每个工单只被统计一次,且归属到最后处理(即真正解决)的成员。
  • 去除冗余语法:删掉DISTINCT ON和max(a.updated_on),用窗口函数更清晰地实现工单归属逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 07:07:01