JQL查询问题:工单年龄分桶时如何仅获取最新状态?
解决方案:基于最新状态变更时间的工单分桶
要实现仅按最后一次进入目标状态的时间进行年龄分桶,需要调整查询逻辑,从匹配「任意一次状态变更」改为锁定「最后一次状态变更」,同时确保工单当前处于目标状态。
核心问题分析
你当前使用的status changed to "Review" before -3d会匹配所有曾在3天前进入过Review状态的工单,完全忽略后续的状态回退和再次变更,所以才会把今日重回Review的工单错误归入3天分桶。
调整后的查询逻辑
以SQL类工单系统为例,核心是先获取每个工单最后一次进入Review状态的时间,再结合当前状态进行分桶:
- 子查询获取最后一次Review变更时间
SELECT ticket_id, MAX(change_timestamp) AS last_review_entry_time FROM ticket_status_history WHERE new_status = 'Review' GROUP BY ticket_id - 关联主表进行分桶计算
SELECT t.ticket_id, t.current_status, CASE WHEN r.last_review_entry_time >= NOW() - INTERVAL 1 DAY THEN '1天内' WHEN r.last_review_entry_time >= NOW() - INTERVAL 3 DAY THEN '1-3天' ELSE '3天以上' END AS age_bucket FROM tickets t JOIN ( SELECT ticket_id, MAX(change_timestamp) AS last_review_entry_time FROM ticket_status_history WHERE new_status = 'Review' GROUP BY ticket_id ) r ON t.ticket_id = r.ticket_id WHERE t.current_status = 'Review' -- 仅保留当前处于Review的工单
针对你的场景说明
对于那笔3天前首次进入Review、2天前退回Ongoing、今日重回Review的工单,上述查询会取到今日的Review变更时间,将其归入「1天内」分桶,符合你的需求。
适配不同系统的注意点
如果你的工单系统使用专用查询语言(如Jira JQL),逻辑一致但语法不同:
- JQL中可结合
status = "Review"与status CHANGED TO "Review" AFTER -1d,部分系统需用latest()函数或排序后取第一条记录来锁定最后一次变更。
内容的提问来源于stack exchange,提问作者mdashed
相关产品推荐
相关产品推荐

