我的输入数据如下,新的 MD_flag 是基于 md_flag 列值的输出列。
销售季节|商品|地点|每周|md_flag|新md_flag Q1-23|BP608WZ271812|LBDI|3 月 W5-23|正确|正确 Q1-23|BP608WZ271812|LBDI|4 月 W1-23|TRUE|TRUE Q1-23|BP608WZ271812|LBDI|4 月 W2-23|TRUE|TRUE Q1-23|BP608WZ271812|LBDI|4 月 W3-23|TRUE|TRUE Q1-23|BP608WZ271812|LBDI|4 月 W4-23|TRUE|TRUE Q2-23|BP608WZ271812|LBDI|5 月 W1-23|TRUE|TRUE Q2-23|BP608WZ271812|LBDI|5 月 W2-23|TRUE|TRUE Q2-23|BP608WZ271812|LBDI|5 月 W3-23|TRUE|TRUE Q2-23|BP608WZ271812|LBDI|5 月 W4-23|TRUE|TRUE Q2-23|BP608WZ271812|LBDI|W1-23 六月|假|假 Q2-23|BP608WZ271812|LBDI|W2-23 六月|正确|正确 Q2-23|BP608WZ271812|LBDI|Jun W3-23|NULL|TRUE Q2-23|BP608WZ271812|LBDI|Jun W4-23|正确|正确 Q2-23|BP608WZ271812|LBDI|Jun W5-23|NULL|TRUE Q2-23|BP608WZ271812|LBDI|7 月 W1-23|NULL|TRUE Q2-23|BP608WZ271812|LBDI|7 月 W2-23|假|假 Q2-23|BP608WZ271812|LBDI|7 月 W3-23|NULL|FALSE Q2-23|BP608WZ271812|LBDI|7 月 W4-23|NULL|FALSE Q3-23|BP608WZ271812|LBDI|8 月 W1-23|NULL|FALSE Q3-23|BP608WZ271812|LBDI|8 月 W2-23|NULL|FALSE
New md_flag 的逻辑是,当 Md_flag 为 Null 时,我们需要填充先前的非空值,直到下一个非空值。
我尝试使用 Hive windows 功能,但无法实现所需的逻辑。有人可以帮我解决这个逻辑吗?
我在社区中看到类似的帖子,但没有提供正确答案。 如何使用下一个非空值填充空列值
您可以使用 WINDOW 函数
last_value
以及其中的另一个参数 TRUE
来忽略空值,如下所示:
select t.*,
coalesce(md_flag,
last_value(md_flag, true)
over (partition by item, location order by wk)
) as md_flag
from your_table t