HiveSQL中last_value函数的应用

一、背景

在以下数据中如何实现对每一个列按照更新时间取最新的非null值?

sql 复制代码
1   a      a      null  202301     202301
1   b      b      null  null       202302
1   null   c      null  null       202303
1   d      null   null  null       202304

如何实现 1  d   c  null  202301   202301

二、last_value函数的使用

sql 复制代码
select last_value(age) over(partition by a order by b,c desc)
sql 复制代码
SELECT id
      ,last_value(name,TRUE)    OVER (PARTITION BY id) name
      ,last_value(age,TRUE)     OVER (PARTITION BY id) name
      ,last_value(address,TRUE) OVER (PARTITION BY id) address
      ,last_value(ct_time,TRUE) OVER (PARTITION BY id) ct_time
      ,up_time
FROM 
(select *
from
(select 1 as id,'a' as name ,'a' as age,null as address,202301 as ct_time,202301 as up_time
union all
select 1 as id,'b' as name ,'b'  as age,null as address,null as ct_time,  202302 as up_time
union all
select 1 as id,null as name,'c'  as age,null as address,null as ct_time,  202303 as up_time
union all
select 1 as id,'d' as name ,null as age,null as address,null as ct_time,  202304 as up_time
) t
ORDER BY t.up_time asc
);
在上述sql中,使用last_value函数对每一个列按照主键id分组,取一个最新值,如果遇见null值,使用参数true进行忽略,最后再使用窗口函数row_number进行分组排序取最大一条数据即可实现数据合并。
相关推荐
GuWenyue34 分钟前
Cursor黑盒拆解!1套LangChain.js手写Mini编程Agent,自动生成React项目,效率提升60%
前端·数据库·人工智能
优橙教育41 分钟前
5G网优培训 vs Java开发:转行选哪个?
java·开发语言·5g
Miao121312 小时前
某海外住宿平台如何在大规模场景下实现指标一致性:Minerva 指标平台实践
大数据·数据库·人工智能
SeaTunnel3 小时前
从 Python Script 地狱到标准化数据集成框架
大数据·开发语言·python·程序员·代码·seatunnel
CodexDave3 小时前
MySQL事务隔离级别与MVCC机制解析
前端·数据库·mysql·nginx·性能优化·负载均衡
碎光拾影3 小时前
ARM交叉工具链各工具作用及IMX6ULL平台LED+蜂鸣器裸机程序实现
java·开发语言·数据库
曾阿伦3 小时前
MongoDB 查询语句备忘手册
数据库·mongodb
一叶龙洲3 小时前
wslg打开Ubuntu24.04默认打开图形界面
linux·服务器·数据库·ubuntu
CCPC不拿奖不改名3 小时前
大模型推理架构与开源生态知识整理
数据库·windows·python·架构·langchain·开源·github
Marst Code3 小时前
(python)2026Plotly 库评估:交互式可视化到底值不值得引入?
开发语言·python