如何找出每个阶段的第一次出现

How to find out first occurrence of each phase

我正在处理客户数据,客户阶段可以根据不同的因素发生变化。我需要找出每一个阶段,以及它变成那个阶段的时间。

示例数据:

预期结果:

我尝试使用滞后功能,但它在重复。

谢谢

lag 可以在这里提供帮助,但您需要添加一些过滤并处理延迟结果中的 null

with ordered_data as (
    select *
         , lag(phase) over (order by phase_date desc) prev_phase
         , lag(phase_date) over (order by phase_date desc) prev_phase_date
    from monitoring.st1
)
select *
from ordered_data
where phase != prev_phase

union

(
    select *
         , phase as prev_phase
         , phase_date as prev_phase_date
    from monitoring.st1
    order by phase_date
    limit 1
)
order by phase_date desc

它生成以下结果,其中 prev_phaseprev_phase_date 保存您要的结果寻找

customerid phase phase_date prev_phase prev_phase_date
A Hold 2021-07-08 Active 2021-08-08
A Suspended 2020-11-10 Hold 2021-01-01
A Active 2020-10-01 Suspended 2020-11-10
A Hold 2020-08-08 Active 2020-10-01
A Active 2020-03-06 Hold 2020-05-05
A Active 2020-01-01 Active 2020-01-01