我有一个交互表,其中每个交互都有一个分配给它的 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 语句使列看起来像所需的那样,但我将如何设置逻辑/函数以获取下一个非空值?
答案 0 :(得分:0)
您可以使用last_value()
:
select t.*,
last_value(id_agent, true) over (order by ts_end_utc) as imputed_id_agent
from t;