SQL查询:如何关联MAX状态ID与对应的lookup状态编码?
获取项目最大状态ID对应状态码的正确SQL写法
方法一:子查询聚合后关联状态表
先通过子查询拿到指定项目的最大状态ID,再关联状态表获取对应的状态编码:
SELECT max_proj.PROJ, max_proj.max_status_id, l.PROJ_STATUS_CD FROM ( SELECT p.PROJ, MAX(p.lookup_PROJ_STATUS_ID) AS max_status_id FROM PROJECT p WHERE p.PROJ = '1703243' GROUP BY p.PROJ ) max_proj LEFT JOIN LOOKUP_PROJ_STATUS l ON max_proj.max_status_id = l.lookup_JCN_STATUS_ID;
方法二:使用窗口函数(适配多项目场景)
通过ROW_NUMBER()窗口函数按状态ID降序排序,直接取每个项目的第一条记录(即最大状态ID对应的记录):
SELECT PROJ, lookup_PROJ_STATUS_ID AS max_status_id, PROJ_STATUS_CD FROM ( SELECT p.PROJ, p.lookup_PROJ_STATUS_ID, l.PROJ_STATUS_CD, ROW_NUMBER() OVER (PARTITION BY p.PROJ ORDER BY p.lookup_PROJ_STATUS_ID DESC) AS rn FROM PROJECT p LEFT JOIN LOOKUP_PROJ_STATUS l ON p.lookup_PROJ_STATUS_ID = l.lookup_JCN_STATUS_ID WHERE p.PROJ = '1703243' ) t WHERE rn = 1;
原查询错误说明
你之前的子查询写法存在两处问题:
- GROUP BY中的子查询缺少
SELECT关键字,且关联字段不匹配(应沿用第一次查询的l.lookup_JCN_STATUS_ID作为关联条件) - 逻辑逻辑偏差:不需要在GROUP BY中嵌套子查询,正确逻辑是先聚合得到最大状态ID,再关联状态表获取对应编码。
内容的提问来源于stack exchange,提问作者Karen
相关产品推荐
相关产品推荐

