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