DB2去重的幾種方法

2021-08-28 20:03:23 字數 1540 閱讀 1190

有兩個意義上的重覆記錄,一是完全重複的記錄,也即所有欄位均重複的記錄,二是部分關鍵字段重複的記錄,比如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等才有效

去重簡單幾種方法

第一種 array unique 移除陣列中重複的值 input array a green red b green blue red result array unique input print r result 以上例程會輸出 array a green 0 red 1 blue 第二種 交換...

陣列去重的幾種方法

實現思路 新建一新陣列,遍歷傳入陣列,值不在新陣列就加入該新陣列中 注意點 判斷值是否在陣列的方法 indexof 是ecmascript5 方法,ie8以下不支援,需多寫一些相容低版本瀏覽器 最簡單陣列去重法 function unique1 array return n 實現思路 新建一js物件...

列表去重的幾種方法

list0 b c d b c a a 方法1 最常用的,但是這種出來時無序的,下面其他方法都是有序的 c list set list0 print c 方法2 使用set list1 sorted set list0 key list0.index sorted output print list...