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进行分组排序取最大一条数据即可实现数据合并。
相关推荐
xys_6781 小时前
JavaEE通关手册:初识Java
java·开发语言
ShineWinsu2 小时前
对于Qt:QTableWidget常见属性以及QTableWidgetItem类的解析
开发语言·c++·qt·gui·客户端·表格·qtablewidget
数据库急诊室_阿哲3 小时前
一次加索引建议的复核记录:从报告到签字
数据库·ai数据库
ShineWinsu3 小时前
对于Qt:QListWidget常见属性以及QListWidgetItem类的解析
开发语言·c++·qt·客户端·列表·qlistwidget·qlistwidgetitem
吴名氏.3 小时前
Java转AI Agent教程(第十二周)检索与切分
java·开发语言·人工智能·ai·ai agent
青瓦梦滋3 小时前
Redis主从复制
服务器·数据库·redis·缓存·bootstrap
瑞雪兆丰年兮4 小时前
JavaWeb-day10-SpringBootWeb案例
java·开发语言·javaweb·web
Elastic 中国社区官方博客4 小时前
更少的位数,相同的召回率:DiskBBQ 更保守的自动校准扫描
大数据·运维·开发语言·人工智能·elasticsearch·搜索引擎
慧都小妮子4 小时前
Wyn商业智能国产数据库适配:数据接入、分析缓存与审计日志验证清单
数据库·数据分析·数据可视化·审计日志·商业智能
三雷科技5 小时前
第6章第4节:自定义分词器
开发语言·c#