hive 去掉重複資料,僅顯示需要一條

2021-10-04 14:22:41 字數 1122 閱讀 3086

select count(1)

,count(distinct student_no)

from(

select cj.student_no

,if(cj.kpi_year<'2018/08','2023年8月前',kpi_year) as contract_year

,row_number() over (partition by cj.student_no order by cj.kpi_year desc)as num

from hf_mobdb.contract_joint cj

)hcj

where hcj.num=1

使用row_number() over

或者直接先排序再distinct,預設留第一條記錄

有很多資料帶有時間戳,例如行為日誌,一般來說乙個id就確定了乙個使用者主體,例如我只想取這個使用者的一條記錄、明確來說是最近的一條行為記錄,用distinct就沒法做了

思路肯定是將id相同的所有記錄按照時間發生的順序倒排取最後一條,group by、order by 、limit 1

(1)當distinct應用到多個欄位的時候,distinct必須放在開頭,其應用的範圍是其後面的所有字段,而不只是緊挨著它的乙個字段,而且distinct只能放到所有欄位的前面

(2)distinct對null是不進行過濾的,即返回的結果中是包含null值的

(3)聚合函式中的distinct,如 count( ) 會過濾掉為null 的項

注意:row_number() over (partition by id order by time desc) 給每個id加一列按時間倒敘的rank值,取rank=1

select m.id,m.gender,m.age,m.rank

from (select id,gender,age,row_number() over(partition by id order by id) rank

from temp.control_201804to201806

where id!='na' and gender!='' or age!=''

) mwherem.rank=1

Hive去重複資料

hive資料去重 insert overwrite table store select t.p key,t.sort word from select p key,sort word row number over distribute by p key sort by sort word as ...

oracle去掉表重複資料

今天在做專案過程中,碰到資料庫表存在重覆記錄,顯示的時候需要去掉重複的資料。想了老半天,最終用rank over partition by 分組字段 order by 排序字段 順序 解決了此問題。一 首先介紹下rank over partition by 分組字段 order by 排序字段 順序...

SQL語句去掉重複資料

有的時候會有部分字段重複,比如id值不一樣,但email一樣,需要刪除掉重複的資料,但相同資料只留一條的情況,如下 1.先查詢出重複的資料 select email from users u1 where rowid select max rowid from users u2 where u1.e...