oracle相同数据取第一条,oracle去除重复, 获取取最新的第一条数据

在Oracle中,为了解决从DEVICE_INFO_TBL表中删除重复device_id并获取每条设备的最新检测信息,可以利用row_number() over函数。首先,查看重复记录,接着通过标记重复记录并应用row_number()函数,根据update_dtm字段降序排序。最后,筛选出row_flg等于1的记录以获取最新数据。row_number()、rank()和dense_rank()都是窗口函数,但各有特点,如row_number()不接受重复值,rank()允许跳跃排序,而dense_rank()保持连续排序。
摘要由CSDN通过智能技术生成

最近项目中的一条sql语句涉及到取一个表中相同工单编码中最新的一条数据,在网上看到一函数完美解决此问题,如下是内容要点:

问题:在项目中有一张设备检测信息表DEVICE_INFO_TBL, 每个设备每天都会产生一条检测信息,现在需要从该表中检索出每个设备的最新检测信息。也就是device_id字段不能重复,消除device_id字段重复的记录,而且device_id对应的检测信息test_result是最新的。

解决思路:用Oracle的row_number() over函数来解决该问题。

解决过程:

1.查看表中的重复记录

select

t.id,

t.device_id,

t.update_dtm,

t.test_result

from DEVICE_INFO_TBL t

03aeaef4f4b83ed46515650ad9a35183.png

2.标记重复的记录

select

t.id,

t.device_id,

t.update_dtm,

t.test_result,

row_number() OVER(PARTITION BY device_id ORDER BY t.update_dtm desc) as row_flg

from DEVICE_INFO_TBL t

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值