LAG и первый NULL - PullRequest
       15

LAG и первый NULL

0 голосов
/ 15 апреля 2019

У меня есть таблица ниже:

id    date       cust
1     3/13/2019  
1     3/14/2019  Johnson
1     3/19/2019 

Я хочу создать столбец, который захватывает последнюю запись и раздел cust по идентификатору.

У меня есть ниже ..

select *
,case
 when a.cust is not null then a.cust
 else lag(a.cust) over partition by a.id order by a.date)
 end lst_cust
from A

Результаты:

id  date        cust
 1   3/13/2019
 1   3/14/2019  Johnson
 1   3/19/2019  Johnson

Как мне захватить «Джонсона» для первого ряда?

Я тоже думал об использовании lead, но не знал, как встраивать как выражение выражения, так и то, что я ищу. Или LAST_VALUE сначала с нулями, но не вижу, как это работает.

Ответы [ 2 ]

2 голосов
/ 15 апреля 2019

last_value хорошая идея, просто добавьте предложение окна:

select id, date_, 
       nvl(cust, last_value(cust) ignore nulls over (partition by id order by date_ 
                 rows between unbounded preceding and unbounded following)) cust
  from a
  order by id, date_

демо

0 голосов
/ 15 апреля 2019

Я думаю, вы хотите и lead() и lag():

select a.*,
       coalesce(a.cust, 
                lag(a.cust) over partition by a.id order by a.date),
                lead(a.cust) over partition by a.id order by a.date)
               ) as lst_cust
from A;

Вам также может потребоваться ignore nulls, если у вас может быть более одного null подряд.

...