SQL Lead 函数在列值发生变化时取值

问题描述 投票:0回答:1

如何编写 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
sql sql-server t-sql sql-server-2012 sql-server-2019
1个回答
0
投票
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;

DBFiddle

© www.soinside.com 2019 - 2024. All rights reserved.