如何使用PostgreSQL合并两个Jira数据库的工单状态变更查询语句
解决方案
由于两个查询的过滤逻辑完全一致,仅输出字段需求不同,直接使用条件聚合即可一次性取出所需的两个日期字段,无需分开查询再手动拼接结果。
合并后查询代码(适配PostgreSQL,兼容你原有Jira数据库查询逻辑)
SELECT i.issuenum, -- 取工单从10400状态转出到指定状态的日期,如需取最晚流转日期将MIN改为MAX即可 MIN(to_char(cg.created, 'DD-MON-YYYY')) FILTER (WHERE ci.newvalue IN ('10904', '10504', '3', '10000')) AS datemoved, -- 单独取工单流转为DONE状态(状态ID 10000)的日期 MIN(to_char(cg.created, 'DD-MON-YYYY')) FILTER (WHERE ci.newvalue = '10000') AS done_date, ci.oldvalue, ci.newvalue FROM changeitem ci INNER JOIN changegroup cg ON cg.id = ci.groupid INNER JOIN jiraissue i ON i.id = cg.issueid INNER JOIN issuestatus s ON s.id = i.issuestatus INNER JOIN project p ON p.id = i.project WHERE ci.oldvalue = '10400' AND ci.newvalue IN ('10904', '10504', '3', '10000') AND p.id = 11009 AND s.id = '10000' GROUP BY i.issuenum, ci.oldvalue, ci.newvalue ORDER BY i.issuenum ASC;
说明
- 你原本提供的查询2存在语法错误,PostgreSQL中
FILTER的正确语法为聚合函数(计算字段) FILTER (WHERE 筛选条件),原查询缺少聚合函数、括号匹配错误,无法正常执行。 - 若你需要每个工单仅返回一行汇总结果,去掉
ci.oldvalue、ci.newvalue的查询和GROUP BY配置即可。 - 若业务需求是取最晚的状态流转日期,将聚合函数
MIN替换为MAX即可。
内容的提问来源于stack exchange,提问作者Paulo Hgo
相关产品推荐
相关产品推荐

