暂无图片
oracle去重并且取重复里面时间最新的那条,有没有效率高的写法?
我来答
分享
不是小熊
2021-11-09
oracle去重并且取重复里面时间最新的那条,有没有效率高的写法?
oracle去重并且取重复里面时间最新的那条,有没有效率高的写法?
我来答
添加附件
收藏
分享
问题补充
2条回答
默认
最新
薛晓刚

select 去重字段,max(时间) from table

前提是去重字段+时间要有联合索引。

暂无图片 评论
暂无图片 有用 0
DarkAthena

这个要结合实际情况看,表里面是只有去重字段和时间,还是有其他字段也要查询?

如果只有去重字段和时间,那么

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
回答交流
提交
问题信息
请登录之后查看
邀请回答
暂无人订阅该标签,敬请期待~~
暂无图片墨值悬赏