SQL需求:按唯一ID提取工单多关键日期及处理人信息
帮助台工单关键时间与处理人员追踪方案
刚好之前帮别人处理过类似的帮助台工单追踪需求,给你整理个实用的SQL方案,完美适配你的业务场景:
需求拆解与实现逻辑
先把你的需求对应到具体的字段处理逻辑上:
- 唯一工单ID:作为分组依据,确保每个工单只返回一条汇总记录
- 工单创建时间:对应
op='I'的创建操作,取该工单下最早的input_date(如果要严格绑定op='I'的记录,也可以用条件过滤精准匹配) - 工单分配时间:取
op='U'且status='open'的最早input_date,也就是第一次分配工单的时间 - 工单关闭时间:取
op='u'且status='closed'的最晚input_date,确保拿到最终的关闭时间 - 关闭工单的用户:提取
op='u'且status='closed'记录中的处理用户(这类操作通常只有一条,用聚合函数就能准确获取)
示例SQL代码
假设你的业务数据表名为ticket_operations,核心字段包括ticket_id(唯一ID)、input_date(操作时间)、op(操作类型)、status(工单状态)、handler_user(处理用户),查询语句如下:
SELECT ticket_id AS 唯一工单ID, -- 取工单最早操作时间作为创建时间,若需严格匹配op='I',替换为下方注释语句 MIN(input_date) AS 创建时间, -- MIN(CASE WHEN op = 'I' THEN input_date END) AS 创建时间, MIN(CASE WHEN op = 'U' AND status = 'open' THEN input_date END) AS 分配时间, MAX(CASE WHEN op = 'u' AND status = 'closed' THEN input_date END) AS 关闭时间, MAX(CASE WHEN op = 'u' AND status = 'closed' THEN handler_user END) AS 关闭工单用户 FROM ticket_operations GROUP BY ticket_id ORDER BY ticket_id;
关键细节说明
- 条件聚合的优势:通过
CASE语句筛选特定操作的记录,再用MIN/MAX聚合函数提取所需信息,完美解决同一工单多条操作记录的汇总问题 - 空值处理:如果部分工单未分配或未关闭,对应的
分配时间、关闭时间、关闭工单用户会返回NULL,你可以用COALESCE函数替换成自定义默认值(比如COALESCE(分配时间, '未分配')) - 精准匹配创建时间:若工单的创建操作(
op='I')不一定是最早的记录,建议使用注释里的条件语句来准确获取创建时间
内容的提问来源于stack exchange,提问作者c0ry
相关产品推荐
相关产品推荐

