SQL - для любой заданной даты, выберите дату предыдущей записи

У меня есть таблица с клиентом и day_id. Для каждой строки я хочу создать новый столбец, в котором будет отображаться дата последнего посещения клиента до даты в этой конкретной строке. Я хочу сохранить каждую строку в моей таблице данных и иметь значение NULL, если для этого клиента не было предыдущего day_id. пример:

Таблица данных:
customer day_id
123 20180101 123 20190101 123 20180530 123 20181231 222 20180701 222 20180801

Желаемый результат:
customer day_id day_id_prior
123 20180101 NULL 123 20190101 20181231 123 20180530 20180101 123 20181231 20180530 222 20180701 NULL 222 20180801 20180701

Любая помощь будет оценена!

1 ответ

Решение

Использование lag оконная функция.

select t.*,lag(day_id) over(partition by customer order by day_id) as prev_dayid
from tbl t
Другие вопросы по тегам