如何编写 LEAD 函数以在 Type 发生变化时获取下一条记录的值。
源数据
Person Type dt_eff
123 ABC 2018-10-23
123 DEF 2018-12-19
124 ABC 2020-01-01
124 ABC 2020-02-15
124 ABC 2020-05-14
124 DEF 2020-10-13
124 FGD 2021-01-15
预期产出
Person Type Start_date End_Date
123 ABC 2018-10-23 2018-12-19
123 DEF 2018-12-19 NULL
124 ABC 2020-01-01 2020-10-13
124 ABC 2020-02-15 2020-10-13
124 ABC 2020-05-14 2020-10-13
124 DEF 2020-10-13 2021-01-15
124 FGD 2021-01-15 NULL
下面的查询仅给出下一列值,但需要类型更改时记录的值。
SELECT Person, Type, dt_eff as start_date,
LEAD(dt_eff,1) over (partition by person order by dt_eff) as end_Date
FROM Person
with cte as (
select *
, lead(dt_eff) over (partition by Person order by Type, dt_eff) dt_eff_lead
from Person
)
select Person, Type, dt_eff StartDate
, max(dt_eff_lead) over (partition by Person, Type) EndDate
from cte
order by Person, Type, dt_eff;