У меня есть следующие данные:
Key Stage CreateDate
AAF 0 01-Jan-2018
AAF 0 02-Jan-2018
AAF 0 10-Jan-2018
AAF 20 20-Jan-2018
AAF 40 20-Mar-2018
AAF 0 01-May-2018
AAF 0 10-May-2018
AAF 0 20-May-2018
AAF 30 20-Jun-2018
AAF 0 20-Jul-2018
AAF 100 20-Jul-2018
Я в основном пытаюсь рассчитать дни, проведенные на каждом этапе. В настоящее время я беру минимальную дату на каждом этапе и нахожу разницу между минимальнымдата следующей стадии:
select
key,
stage,
cast(extract (day from max(next_dt) - min(createddate)) as number) as interval_days
from
(
select
key,
stage,
createddate
lead(createddate,1) over (partition by key order by createddate) next_dt
from oppstages
)
group by key,stage
Как видно, иногда стадия прогрессирует от 0-40, но снова возвращается к 0. Таким образом, приведенная выше логика не работает правильно, и явидя необходимость сгруппировать 0-40 как одну категорию, и что-либо после 40 как следующую категорию и т. д. (если этап уменьшается и перезапускается с новым меньшим номером этапа).Приведенный ниже запрос дает мне точку, где вероятность снижается, но я не могу пометить, чтобы сгруппировать строки дальше.
select key,
stage,
createddate,
next_dt,
next_prob,
case when next_prob < stage then 1 else 0 end as valid_flag,
from
(
select
key,
stage,
createddate,
lead(createddate,1) over (partition by key order by createddate) next_dt,
coalesce(lead(stage,1) over (partition by key order by createddate),101) next_prob,
from oppstages
) a
Я ожидаю, что этот вывод, чтобы я мог сгруппировать, используя флаг для расчета дней, потраченных накаждый экземпляр:
Key Stage CreateDate Flag
AAF 0 01-Jan-2018 1
AAF 0 02-Jan-2018 1
AAF 0 10-Jan-2018 1
AAF 20 20-Jan-2018 1
AAF 40 20-Mar-2018 1
AAF 0 01-May-2018 2
AAF 0 10-May-2018 2
AAF 0 20-May-2018 2
AAF 30 20-Jun-2018 2
AAF 10 20-Jul-2018 3
AAF 100 20-Jul-2018 3
спасибо.