брать значения после фильтрации данных - PullRequest
0 голосов
/ 31 октября 2019

Ниже приведены результаты созданного мной оператора WITH:

id    prodid    start     end       lead   lag    rnk_prod_first    rnk_prod_last
 1     4654    2/26/19   4/5/19     y      null      1                  7
 1     4655    5/20/19   8/1/19     y      y         2                  6
 1     4656    11/6/19   11/13/19   n      y         3                  5
 1     4657    11/14/19  10/30/20   n      n         4                  4
 1     4658    10/31/20  11/15/20   n      n         5                  3
 1     4659    11/16/20  11/30/20   y      n         6                  2
 1     4660    12/10/20  12/20/20   null   y         7                  1

Мне нужно создать логический столбец, который идентифицирует дату окончания, когда lead = 'y', или принять дату окончания следующего значениягде lead = 'y'

lead / lag = Определяет, есть ли пробелы в датах начала / окончания

ожидаемые результаты:

id    prodid    start     end       lead   lag    rnk_prod_first    rnk_prod_last   lead_end_dt
 1     4654    2/26/19   4/5/19     y      null      1                  7             4/5/19
 1     4655    5/20/19   8/1/19     y      y         2                  6             8/1/19
 1     4656    11/6/19   11/13/19   n      y         3                  5             11/30/20
 1     4657    11/14/19  10/30/20   n      n         4                  4             11/30/20
 1     4658    10/31/20  11/15/20   n      n         5                  3             11/30/20
 1     4659    11/20/20  11/30/20   y      y         6                  2             11/30/20
 1     4660    12/10/20  12/20/20   null   y         7                  1             12/20/20

Итак, что-токак показано ниже

select case
       when lead <> 'n' then end
       --when lead <> 'y' then --take next value where lead = 'y'
                               --can we use lead and ignore the 'n'?
                               --can we use first_value somehow?
       end lead_end_dt

1 Ответ

0 голосов
/ 31 октября 2019

Я думаю, что вы можете использовать совокупный условный максимум - в обратном порядке:

select max(case when lead = 'y' then end end) over (partition by id order by order by prod_id desc)

Если это единственное значение, которое вы хотите, возможно, есть более простые способы его получить. Если это так, задайте новый вопрос, опишите исходные данные, предоставьте желаемые результаты и объясните логику.

...