首页 > 编程知识 正文

oracle去除重复数据,oracle数据去重方法

时间:2023-05-06 10:46:28 阅读:31142 作者:234

问题:项目中有设备发现信息表DEVICE_INFO_TBL。 每个设备每天生成发现信息。 当前,需要从该表中搜索每个设备的最新发现信息。 也就是说,device_id字段不能重复,device_id字段重复的记录将被删除,与device_id对应的检测信息test_result是最新的。

解决方法:使用Oracle的row_number () over函数解决此问题。

解决流程:

1 .查看表中的重复记录

选择

能干的烤鸡肉串

t.device_id,

t.update_dtm,

t.test_result

from DEVICE_INFO_TBL t

2 .标记重复的记录

选择

能干的烤鸡肉串

t.device_id,

t.update_dtm,

t.test_result,

row_number(over ) partitionbydevice _ idorderbyt.update _ DTM desc ) as row_flg

from DEVICE_INFO_TBL t

3 .过滤重复数据,获取最新记录

选择

temp.id,

temp.device_id,

temp.update_dtm,

temp.test_result

来自(

选择

能干的烤鸡肉串

t.device_id,

t.update_dtm,

t.test_result,

row_number(over ) partitionbydevice _ idorderbyt.update _ DTM desc ) as row_flg

来自设备_ info _ TBL t ) temp

where temp.row_flg='1'

row_number () over ) partitionbyCOL1orderbyCOL2)表示根据col1分组,在组中根据col2排序,并且由该函数计算的值在每个组中是源

与rownum的区别在于,如果使用rownum进行排序,则在结果集中添加伪列rownum,然后对其进行排序;相反,此函数在包含排序子句后进行排序,然后计算行号。

row_number ()与rownum几乎相同,功能更好一些) )可以在每个组中从1开始排序。

rank ) )是跳跃排名,第2位有2个的情况下排名第4 (同样在各组内)。

dense_rank ) ) l是连续排序,第二位有两个时保持第三位。 与此相对,row_number没有重复值。

lag(arg1、arg2、arg3) :

arg1是从其他行返回的表达式

arg2是要检索的当前低分区的偏移量。 是正偏移,是搜索上一行的次数。

arg3是arg2表示的数字超出分组范围时返回的值。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。