DB2去重的幾種方法


有兩個意義上的重復記錄,一是完全重復的記錄,也即所有字段均重復的記錄,二是部分關鍵字段重復的記錄,比如Name字段重復,而其他字段不一定重復或都重復可以忽略。

例如下表:table1

用戶辦理套餐的記錄表,可看出,user_id=33333有兩條完全重復的記錄,user_id=11111的tc_name和open_date不一樣

1、對於完全重復的記錄,直接使用distinct 即可

  select 

          distinct user_id,name,tc_name,open_date

  from  

          table1

可得到如下結果:

可以看出,完全重復的記錄已經只剩下唯一的一條,但是部分重復的記錄該方法無效

 

2、對於完全重復的記錄,還可以使用group by

select
        user_id,name,tc_name,open_date
from
        table1
group by
        user_id,name,tc_name,open_date

結果和上圖一致,即:

該方法也只對完全重復的記錄有效

 

3、row_number()over() 分等級之后限定 row=1

select
        user_id,name,tc_name,open_date
from
(
    select
          user_id,name,tc_name,open_date
         ,row_number()over(partition by user_id order by open_date desc) as row
   from
         table1
)
where row=1

該方法得到的結果如下:

 

該方法不僅除掉了完全重復的記錄,而且還除掉了不完全重復的記錄,對open_date進行排等級,按照開通日期的倒序排列,且取出第一條記錄,即開通時間最近的記錄

 

 

4、max等聚合函數

select
       user_id,name,max(tc_name),max(open_date)
from
       table1
group by
        user_id,name

該方法得出的結果如下,對完全重復記錄和部分重復記錄都有效,注:部分重復的記錄要對所有重復字段使用max或min等才有效


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2026 CODEPRJ.COM