Sql 获取以前的结果并添加到行中
我有下表的结果 标准: 按CUSTID和ITEMID划分 其中end_dt不为空 如果RESP列为null,则采用具有条目的最新值Sql 获取以前的结果并添加到行中,sql,oracle,lag,lead,Sql,Oracle,Lag,Lead,我有下表的结果 标准: 按CUSTID和ITEMID划分 其中end_dt不为空 如果RESP列为null,则采用具有条目的最新值 CUSTID ITEMID START_DT END_DT RESP START_CYCLE END_CYCLE 1 101 1/1/2019 4/1/2019 400 1/1/2019 1/12/2019 1 101 1/1/2019 4/1/201
CUSTID ITEMID START_DT END_DT RESP START_CYCLE END_CYCLE
1 101 1/1/2019 4/1/2019 400 1/1/2019 1/12/2019
1 101 1/1/2019 4/1/2019 1/13/2019 1/18/2019
1 101 1/1/2019 4/1/2019 750 1/19/2019 2/15/2019
1 101 1/1/2019 4/1/2019 2/16/2019 4/1/2019
2 909 3/1/2019 444 3/1/2019 3/2/2019
2 909 3/1/2019 3/3/2019 3/10/2019
2 909 3/1/2019 767 3/11/2019 3/28/2019
2 909 3/1/2019 3/29/2019 12/31/3000
预期成果:
CUSTID ITEMID START_DT END_DT RESP START_CYCLE END_CYCLE
1 101 1/1/2019 4/1/2019 400 1/1/2019 1/12/2019
1 101 1/1/2019 4/1/2019 1/13/2019 1/18/2019
1 101 1/1/2019 4/1/2019 750 1/19/2019 2/15/2019
1 101 1/1/2019 4/1/2019 750 2/16/2019 4/1/2019
2 909 3/1/2019 444 3/1/2019 3/2/2019
2 909 3/1/2019 3/3/2019 3/10/2019
2 909 3/1/2019 767 3/11/2019 3/28/2019
2 909 3/1/2019 3/29/2019 12/31/3000
唯一正在更改的行是
1 101 1/1/2019 4/1/2019 750 2/16/2019 4/1/2019
此行不应更改,这是正确的:
1 101 1/1/2019 4/1/2019 1/13/2019 1/18/2019
您必须检查三件事:resp为null,end_dt不为null,如果这是此custid的最后一行,则为itemid。只有在这种情况下才使用最后一个值,如这里的列
resp2
:
select custid, itemid, start_dt, end_dt, resp, start_cycle, end_cycle,
case when resp is null
and end_dt is not null
and lead(itemid) over (partition by custid, itemid order by start_cycle) is null
then last_value(resp) ignore nulls
over (partition by custid, itemid order by start_cycle)
else resp
end resp2
from t