2021-11-09
oracle去重并且取重复里面时间最新的那条,有没有效率高的写法?
| oracle去重并且取重复里面时间最新的那条,有没有效率高的写法? |
我来答
添加附件
收藏
分享
问题补充
2条回答
默认
最新
回答交流
提交
问题信息
请登录之后查看
邀请回答
暂无人订阅该标签,敬请期待~~
墨值悬赏
| oracle去重并且取重复里面时间最新的那条,有没有效率高的写法? |
select 去重字段,max(时间) from table
前提是去重字段+时间要有联合索引。
评论
有用 0这个要结合实际情况看,表里面是只有去重字段和时间,还是有其他字段也要查询?
如果只有去重字段和时间,那么
select 去重字段1,去重字段2,max(时间) from table group by 去重字段1,去重字段2;
--还可以加上并行,并行对group by有奇效
如果有其他字段,那么
select * from
select a.*,row_number() over(partition by 去重字段1,去重字段2 order by 时间 desc) rn from table a)
where rn=1
至于效率问题,一般情况下越直接越快,你这个问题其实就是分组排序再取一条,当然如果还要在sql上提效的话,如果接受近似值,可以尝试使用oracle 18c的近似TOP-N特性。
另外,效率问题也要看配置情况,内存、cpu、磁盘,要充分利用各硬件的优势,比如你内存大且频率高,就可以一次性查,如果小点就分批查;cpu线程多,就可以加多点并行;磁盘读速度不行就尽量使用索引等等
评论
有用 0
墨值悬赏