DB2去重的幾種方法

有兩個意義上的重複記錄,一是徹底重複的記錄,也即全部字段均重複的記錄,二是部分關鍵字段重複的記錄,好比Name字段重複,而其餘字段不必定重複或都重複能夠忽略。函數

例以下表:table1spa

用戶辦理套餐的記錄表,可看出,user_id=33333有兩條徹底重複的記錄,user_id=11111的tc_name和open_date不同3d

一、對於徹底重複的記錄,直接使用distinct 便可blog

  select it

          distinct user_id,name,tc_name,open_dateio

  from  table

          table1date

可獲得以下結果:select

能夠看出,徹底重複的記錄已經只剩下惟一的一條,可是部分重複的記錄該方法無效方法

 

二、對於徹底重複的記錄,還可使用group by

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

結果和上圖一致,即:

該方法也只對徹底重複的記錄有效

 

三、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進行排等級,按照開通日期的倒序排列,且取出第一條記錄,即開通時間最近的記錄

 

 

四、max等聚合函數

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

該方法得出的結果以下,對徹底重複記錄和部分重複記錄都有效,注:部分重複的記錄要對全部重複字段使用max或min等纔有效

相關文章
相關標籤/搜索