presto SQL 如果某列的字段在该日期为空值,查询时结果显示为之前最接近日期的非空值

需求:如果某列的字段在该日期为空值,查询时结果显示为之前最接近日期的非空值
如下图结果
方法2种:
需要得等如左边的结果

方法1:利用last_value函数,如遇空值 返回最近的 非空值,如下
last_value(poi_all_ct,true) over(partition by attri_bution order by order_pay_time rows between unbounded preceding and current row
rows between unbounded preceding and current row:从本行最初到当前行

此方法适用于hive环境,但不适用于 presto SQL

方法2:适用于presto SQL

将 poi_all_ct 分组排序编码,不为空则返回1,然后累计,这样遇到空值行则返回0 ,值和最后一个不为空的一样
SUM(case when poi_all_ct is not null then 1 end) over(partition by attri_bution order by order_pay_time) as rn
如下图:
在这里插入图片描述
然后 再 用 first_value 函数取 每rn组第一个值
first_value(poi_all_ct) over(partition by attri_bution,rn order by order_pay_time) as new_val
按照 rn 和 归属 attri_bution 分类,按照时间order_pay_time排序,取每组第一个值

结果如下:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值