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),取列表内的第一个元素。感觉写法上还是没有第一种方法来得快。
注:以上代码未在环境中测试,仅提供思路的伪代码
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架