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

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

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

暂无图片 评论
暂无图片 有用 0
打赏 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
打赏 0
回答交流
Markdown


请输入正文
提交
相关推荐
oracle 19.3 rac for linux 7.8 -实例被驱逐原因查询
回答 6
跟参数没关系,就是共享磁盘没配置好,只能一个节点读取
Oracle 这个磁盘IO是否有问题?await数值不太正常
回答 1
sdb的io等待有点高。不见得是磁盘问题。也可能是应用SQL问题导致的高IO。需要结合AWR看看。sdb上运行的是什么?
在windows下安装oracle 11.2.0.1
回答 5
Windows下安装Oracle可参考Oracle官方文档https://docs.oracle.com/cd/E1188201/install.112/e49703/toc.htmBGBEEBAD
想部署用Oracle的程序,是不是这台机子上必须要装客户端?
回答 4
已采纳
连接oracle数据库,肯定需要客户端,但这是指广义上的客户端。而且客户端并不一定需要安装,几个动态库文件可以算得上是客户端,像odbc/jdbc这种其实都算是客户端,它们只是客户端的不同形式罢了。所
Oracle 11g 安装RAC 文档上指的主机1(就是安装gird database这些软件的那台机器) 请问主机1是太额外的机器,还是rac1?
回答 1
rac1
Oracle归档删除
回答 4
一楼答案已经很标准了,基本就是定时任务shell脚本中以rman方式清理。
expdp可以只导出图片格式的那个字段吗?
回答 1
建议参考下杨长老以前发的文章http://blog.itpub.net/31556440/viewspace2639782/
12c RAC监听问题(ASM及db无法注册到监听)
回答 3
升级问题到:一般问题
Oracle排序后如何限制返回的行数?
回答 1
已采纳
12C之前只能使用rownum来限制返回行数。12C之后提出一个新的函数,通过偏移量来限制:原sql返回结果如下:SELECTFROMluciferORDERBYid;通过以下语句查询限制返回前三条:
Oracle全面扫描一个几乎为空的散列聚簇表与全面扫描一个满的散列聚簇表所花的时间一样吗?
回答 1
已采纳
所花的时间是一样的。原因如下:散列聚簇索引表中的数据就是索引,没有物理索引。Oracle取得一行的键值,会使用内部函数或提供的方法计算其散列值,然后使用这个散列值得出数据应该在磁盘上的哪个位置,所以花
问题信息
请登录之后查看
邀请回答
暂无人订阅该标签,敬请期待~~