如何使用下一个非空值填充空列值

时间:2021-06-22 00:34:37

标签: mysql sql hive hiveql window-functions

我有一个交互表,其中每个交互都有一个分配给它的 id_agent。某些行的 id_agent 具有空值,我想为其分配下一个非空值。我可以使用下一行的前导函数执行此操作,但是,我有多个连续行的 id_agent 为 null 的实例

当前数据:

<头>
id_agent ts_end_utc 入站或出站 interaction_channel id_ticket
-2 2020-09-15 9:40:04 入站 支持机器人 93789075
299210763 2020-10-10 16:00:23 出站 消息 93789075
2020-10-12 8:46:05 入站 消息 93789075
2020-10-12 10:38:07 入站 消息 93789075
2020-10-15 8:25:23 入站 消息 93789075
234926893 2020-10-15 17:45:58 出站 消息 93789075
299210763 2020-10-28 19:05:49 出站 消息 93789075
2020-11-09 6:50:13 入站 消息 93789075
299210763 2020-11-09 13:03:05 出站 消息 93789075

期望状态:

<头>
id_agent ts_end_utc 入站或出站 interaction_channel id_ticket
-2 2020-09-15 9:40:04 入站 支持机器人 93789075
299210763 2020-10-10 16:00:23 出站 消息 93789075
234926893 2020-10-12 8:46:05 入站 消息 93789075
234926893 2020-10-12 10:38:07 入站 消息 93789075
234926893 2020-10-15 8:25:23 入站 消息 93789075
234926893 2020-10-15 17:45:58 出站 消息 93789075
299210763 2020-10-28 19:05:49 出站 消息 93789075
299210763 2020-11-09 6:50:13 入站 消息 93789075
299210763 2020-11-09 13:03:05 出站 消息 93789075

我知道以后如何使用 case 语句使列看起来像所需的那样,但我将如何设置逻辑/函数以获取下一个非空值?

1 个答案:

答案 0 :(得分:0)

您可以使用last_value()

select t.*,
       last_value(id_agent, true) over (order by ts_end_utc) as imputed_id_agent
from t;