需求:如果某列的字段在该日期为空值,查询时结果显示为之前最接近日期的非空值
如下图结果
方法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排序,取每组第一个值
结果如下: