Oracle中对列使用MAX函数时如何关联另一张表获取对应字段
报错原因
你遇到的语法报错并非括号缺失导致,核心问题是内层子查询中聚合得到的最大cveaccion字段别名为ultima,子查询输出的字段列表里不存在CVEACCION字段,关联时无法识别对应字段触发报错。
实现方案
方案1:兼容所有Oracle版本,基于原有查询调整
在子查询外层关联tblACCION表,用子查询输出的ultima字段做关联条件:
SELECT t.cveano, t.cvenumero, t.ultima AS CVEACCION, ta.descripcion AS "CVEACCION NAME Brought from tblACCION" FROM ( SELECT cveano, cvenumero, max(cveaccion) as ultima FROM tblbitacoragf WHERE cveusuario = 1 GROUP BY cvenumero, cveano ORDER BY max(fechaaccion) DESC ) t INNER JOIN tblACCION ta ON t.ultima = ta.cveaccion WHERE ROWNUM <= 4
方案2:Oracle 12c及以上版本简化写法
你已经配置了cveaccion的对应约束,cveaccion和descripcion是一一对应关系,可以先关联再聚合,写法更简洁:
SELECT tbgf.cveano, tbgf.cvenumero, MAX(tbgf.cveaccion) AS CVEACCION, MAX(ta.descripcion) AS "CVEACCION NAME Brought from tblACCION" FROM tblbitacoragf tbgf INNER JOIN tblACCION ta ON tbgf.cveaccion = ta.cveaccion WHERE tbgf.cveusuario = 1 GROUP BY tbgf.cvenumero, tbgf.cveano ORDER BY MAX(tbgf.fechaaccion) DESC FETCH FIRST 4 ROWS ONLY
内容的提问来源于stack exchange,提问作者Rudy Rosa
相关产品推荐
相关产品推荐

