[Oracle]去除某行,单列重复的数据

01.说明

因为实在找不到可以模拟该方法的案例,就简单的说一下大概的数据和处理逻辑,小伙伴们懂这个逻辑就行,到实战里活学活用:

select * from
(
/*这里的每一条假设是一个数据源,里面有大量的数据,可能存在单列重复数据*/
select 1001 id,'小白'name,60 achievement from dual
union all
/*这里的每一条假设是一个数据源,里面有大量的数据,可能存在单列重复数据*/
select 1001 id,'小白'name,100 achievement from dual
union all
/*这里的每一条假设是一个数据源,里面有大量的数据,可能存在单列重复数据*/
select 1001 id,'小白'name,30 achievement from dual)order by id

在这里插入图片描述
假设,这3条数据每一条都是做了某些限制得到的,我们将这些数据全部汇集到一起后,就会出现单列重复而其他数据不重复的数据.我们要如何去除这些数据呢?

02.添加辅助列

每一个数据源的限制都有一个限制的顺序,类似case when xx then xx when xxx then xxx end所以我们用辅助列来假定他们的优先级.

select * from
(
/*这里的每一条假设是一个数据源,里面有大量的数据,可能存在单列重复数据*/
select 1001 id,'小白'name,60 achievement,1 sort from dual
union all
/*这里的每一条假设是一个数据源,里面有大量的数据,可能存在单列重复数据*/
select 1001 id,'小白'name,100 achievement,2 sort from dual
union all
/*这里的每一条假设是一个数据源,里面有大量的数据,可能存在单列重复数据*/
select 1001 id,'小白'name,30 achievement,3 sort from dual)order by id

在这里插入图片描述

03.优先级排序

我们用row_number函数,并以id 分割,id,sort排序,得出重复限制的优先级

select t.*,row_number()over(partition by id order by id,sort)a from
(
/*这里的每一条假设是一个数据源,里面有大量的数据,可能存在单列重复数据*/
select 1001 id,'小白'name,60 achievement,1 sort from dual
union all
/*这里的每一条假设是一个数据源,里面有大量的数据,可能存在单列重复数据*/
select 1001 id,'小白'name,100 achievement,2 sort from dual
union all
/*这里的每一条假设是一个数据源,里面有大量的数据,可能存在单列重复数据*/
select 1001 id,'小白'name,30 achievement,3 sort from dual)t order by id

在这里插入图片描述

04.去除重复项

我们只要a=1的数据,剩下的都是单列重复的数据,这样,就完成了去除某行,单列重复的数据的功能

select * from(select t.*,row_number()over(partition by id order by id,sort)a from
(
/*这里的每一条假设是一个数据源,里面有大量的数据,可能存在单列重复数据*/
select 1001 id,'小白'name,60 achievement,1 sort from dual
union all
/*这里的每一条假设是一个数据源,里面有大量的数据,可能存在单列重复数据*/
select 1001 id,'小白'name,100 achievement,2 sort from dual
union all
/*这里的每一条假设是一个数据源,里面有大量的数据,可能存在单列重复数据*/
select 1001 id,'小白'name,30 achievement,3 sort from dual)t order by id)
where a=1 order by id

在这里插入图片描述

05.批量删除

//如果同一个 userid 和 post 则用修改日期判断,散掉多余的,或者修改日期比较早的数据
DELETE FROM xx/*自己的表*/ WHERE rowid in  (select rowid from (select rowid,post,userid,to_char(UPDATATIME,'yyyy/mm/dd HH24:mi:ss')UPDATATIME,
row_number()over(partition by userid,post order by userid,post,UPDATATIME desc)a
from xx/*自己的表*/)where a<>1)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值