Hive查詢分組內的最大值行


工作中碰到這么個問題:
現在有表格形式如下

日期 名字 編碼
20200910 a 123
20200815 b 111
20200625 a 234
20200208 b 333

目的是取出該表中每個名字的最新編碼。經過百度大法,有兩種方法:

1 開窗函數

with t1 as (
select *,row_number() over (partition by name order by date desc) rn
from table )
select * from t1 where rn=1

開窗后,擴展一個組內排序的字段,然后取出排序第一位的行。

2 排序后collect_list轉換成列表取指定位置元素

with t1 as(
select * from table order by name,date desc
)
select collect_list(date)[0],name,collect_list(code)[0] from t1 group by name

將日期組內排逆序后,轉換成列表(Array),取列表內的第一個元素。感覺寫法上還是沒有第一種方法來得快。

注:以上代碼未在環境中測試,僅提供思路的偽代碼


免責聲明!

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



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