Oracel查询根据部分字段去重复
一般一个表的id是唯一的,如果除去id则会有重复数据,有时做项目时查询要求根据某几个字段去掉重复记录,并且查询保留id
以下是Oracel查询时根据部分字段去重复,例如,查询的字段包括id,Sys,Com,想要将Sys,Com两个字段重复的记录去掉,这要怎么做呢?
步骤一:
先取出去除重复后的记录,使用语句select distinct Sys,Com from Par_List_tb 得到一个表
步骤二:
使用语句select id,Sys,Com from Par_List_tb获得包括id,没有去重复的原表
步骤三:
将以上两个表做连接得到一个表
select id,Sys,Com from Par_List_tb lb right join (select distinct Sys,Com from Par_List_tb ) lb1 on lb.Sys=lb1.Sys and
lb.Com=lb1.Com
步骤四:
将表根据Sys,Com字段分区
select row_number() over(partition by lb2.Sys,lb2.Com order by lb2.Sys desc) rn,lb2.* from
(select id,Sys,Com from Par_List_tb lb right join (select distinct Sys,Com from Par_List_tb ) lb1 on lb.Sys=lb1.Sys and
lb.Com=lb1.Com)lb2
步骤五:取得每个分区中的第一条数据,得到表lb5
select * from
(select row_number() over(partition by lb2.Sys,lb2.Com order by t.Sys desc) rn,lb2.* from
(select id,Sys,Com from Par_List_tb lb right join (select distinct Sys,Com from Par_List_tb ) lb1 on lb.Sys=lb1.Sys and
lb.Com=lb1.Com)lb2)lb3 where lb3.rn=1
浙公网安备 33010602011771号