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进行分组排序取最大一条数据即可实现数据合并。
相关推荐
chen.@-@4 分钟前
后端下载限速(redis记录实时并发,bucket4j动态限速)
数据库·redis·缓存
Bruce_Liuxiaowei6 分钟前
PHP文件包含漏洞详解:原理、利用与防御
开发语言·网络安全·php·文件包含
王小小鸭15 分钟前
【Oracle APEX开发小技巧12】
数据库·oracle
泽020216 分钟前
C++之STL--list
开发语言·c++·list
YGGP19 分钟前
吃透 Golang 基础:数据结构之 Map
开发语言·数据结构·golang
噼里啪啦啦.20 分钟前
Spring事务和事务传播机制
数据库·sql·spring
~plus~21 分钟前
Harmony核心:动态方法修补与.NET游戏Mod开发
开发语言·jvm·经验分享·后端·程序人生·c#
搬码红绿灯26 分钟前
MySQL主从复制深度解析:原理、架构与实战部署指南
数据库·mysql·架构
步、步、为营28 分钟前
.NET 事件模式举例介绍
java·开发语言·.net
呼拉拉呼拉28 分钟前
Redis高可用架构
数据库·redis·架构·高可用架构