查询返回重复工单工作日志行,需获取每条工单最新工作日志
解决方案
要获取每个事件的最新工作日志,核心是先定位每个事件(通过InstanceId)对应的最大工作日志ID,再基于这个ID关联查询具体的日志内容。以下是调整后的SQL:
SELECT hd.`Incident Number` AS Incident_Number, hd.`Status` AS Status, hd.`Priority` AS Priority, hd.`Assigned Group` AS Assigned_Group, hd.`Assignee` AS Assignee, hd.`Submit Date` AS Submit_Date, hd.`Last Modified Date` AS Last_Modified_Date, hd.`Description` AS Description, hd.`Submitter` AS Submitter, swl.`Worklog Description` AS Worklog_Description, swl.`Work Log ID` AS Work_Log_ID FROM `HPD:Help Desk` hd INNER JOIN ( -- 先获取每个事件对应的最大工作日志ID SELECT `InstanceId`, MAX(`Work Log ID`) AS Max_Work_Log_ID FROM `HPD:Search-Worklog` GROUP BY `InstanceId` ) latest_wl ON hd.`InstanceId` = latest_wl.`InstanceId` INNER JOIN `HPD:Search-Worklog` swl ON latest_wl.`InstanceId` = swl.`InstanceId` AND latest_wl.Max_Work_Log_ID = swl.`Work Log ID` WHERE hd.`Status` IN ('Assigned','Pending','In Progress') AND hd.`Submit Date` >= $__from/1000 AND hd.`Submit Date` <= $__to/1000 ORDER BY hd.`Submit Date` ASC LIMIT 20
逻辑说明
- 子查询
latest_wl:按InstanceId分组,找出每个事件对应的最大Work Log ID——通常日志ID是递增生成的,最大ID就对应最新的工作日志。 - 两次关联:先把工单表和子查询关联,锁定每个工单对应的最新日志ID;再用这个ID关联工作日志表,取出具体的日志内容。
- 去掉
DISTINCT:原查询的DISTINCT是多余的,通过上述关联后每个工单只会返回一条最新日志记录,不会产生重复。
如果你的日志表是用时间字段(比如Create Date)判断新旧,也可以把子查询里的MAX(Work Log ID)换成MAX(Create Date),关联时匹配对应时间字段即可。
内容的提问来源于stack exchange,提问作者Glenn Moore
相关产品推荐
相关产品推荐

