如何编写Oracle SQL实现user_table分组后取slno最大值对应记录
Oracle 按分组保留最大slno记录查询方案
以下是两种可直接使用的实现方式:
方式1:窗口函数实现(推荐,性能更优)
通过ROW_NUMBER()窗口函数对非slno字段分组,每组内按slno倒序排序后取第一条即可:
SELECT slno, col2, col3, col4 FROM ( SELECT slno, col2, col3, col4, -- 替换为你表中除slno外的实际字段名 ROW_NUMBER() OVER (PARTITION BY col2, col3, col4 ORDER BY slno DESC) rn FROM user_table ) t WHERE rn = 1;
说明:PARTITION BY后填写所有除slno外需要值一致的分组字段,ORDER BY slno DESC实现同组内slno从大到小排序,rn=1取每组slno最大的记录。
方式2:分组关联实现
先分组查询出每组最大的slno,再关联原表得到完整记录:
SELECT a.* FROM user_table a INNER JOIN ( SELECT MAX(slno) max_slno, col2, col3, col4 -- 替换为你表中除slno外的实际字段名 FROM user_table GROUP BY col2, col3, col4 ) b ON a.slno = b.max_slno AND a.col2 = b.col2 AND a.col3 = b.col3 AND a.col4 = b.col4;
内容的提问来源于stack exchange,提问作者Jakka
相关产品推荐
相关产品推荐

