Как добавить условия if или case в функции spark sql lag - PullRequest
0 голосов
/ 04 января 2019

Нужно добавить некоторые условия в spark sql lag функцию

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

id,date
er1,2018-01-19
er1,null
er1,2018-02-10
er2,2018-11-11
er2,null
er2,null
er2,null

select Id, date,
lag(date) PARTITION BY id order by date as last_date
from mytable

id,date,last_date
er1,2018-01-19,null
er1,null,2018-01-19
er1,2018-02-10,null
er2,2018-11-11,null
er2,null,2018-11-11
er2,null,null
er2,null,null

Но я обнаружил, что в столбце даты есть нулевые значения, и на самом деле я хочу, чтобы последняя нулевая дата была указана как last_date, поэтому второй параметр функции lag не определен. Я пытаюсь добавить столбец, чтобы указать число нулей в предыдущих строках или удалить пустые строки и присоединиться к нему, но есть ли лучшие решения?

Я хочу получить это

id,date,last_date
er1,2018-01-19,null
er1,null,2018-01-19
er1,2018-02-10,2018-01-19
er2,2018-11-11,null
er2,null,2018-11-11
er2,null,2018-11-11
er2,null,2018-11-11

1 Ответ

0 голосов
/ 04 января 2019

Стандартная функция lag() имеет параметр ignore nulls:

select Id, date,
       lag(date ignore nulls) over (PARTITION BY id order by date) as last_date
from mytable;

Но не все базы данных поддерживают это.Вы можете эмулировать его с помощью подзапроса:

select Id, date,
       min(date) over (partition by id, grp order by date) as last_date
from (select t.*,
             count(date) over (partition by id order by date) as grp
      from mytable t
     ) t
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...