oracle sql(按某个字段分组然后从每组取出最大的一条纪录)?
比如表 mo_partprg
字段有:listid recid
1 1
1 2
2 3
2 4
2 5
想得到的数据是 按照 listid 分组 然后取出每组中recid最大的那几条纪录。结果应该是这两条纪录:
字段:listid recid
1 2
2 5
写法如下:
select listid,recid
from ( select listid,recid,row_number() over(partition by listid order by recid desc) rn
from mo_partprg) t1 where rn=1;
说明:
row_number()和rownum差不多,功能更强一点(可以在各个分组内从1开始排序)。
rank()是跳跃排序,有两个第二名时接下来就是第四名(同样是在各个分组内)
dense_rank()也是连续排序,有两个第二名时仍然跟着第三名。相比之下row_number是没有重复值的。