Собесов

Альфабанк PDF: периоды действия сегмента клиента из месячных срезов

SQLGaps and islandsСложнаяMiddle

Условие

Даны месячные срезы сегментов клиентов:

CREATE TABLE segment(date date, ClientID varchar(6), SegmentID int);
INSERT INTO segment VALUES
 ('2018-01-31','A11111',2),
 ('2018-02-28','A11111',2),
 ('2018-03-31','A11111',1),
 ('2018-04-30','A11111',1),
 ('2017-11-30','B22222',1),
 ('2017-10-31','B22222',1),
 ('2017-09-30','B22222',3),
 ('2017-09-30','C33333',1),
 ('2017-10-31','C33333',1);

Получить периоды действия каждого сегмента у каждого клиента: (client, segment, period_start, period_end).

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

A11111, 2, 2018-01-31, 2018-02-28
A11111, 1, 2018-03-31, 2018-04-30
B22222, 3, 2017-09-30, 2017-09-30
B22222, 1, 2017-10-31, 2017-11-30
C33333, 1, 2017-09-30, 2017-10-31

Хочешь увидеть разбор?

Зарегистрируйся бесплатно — откроется развёрнутое решение этой задачи и ещё 4 на выбор.

Зарегистрироваться и увидеть разбор
Уже есть аккаунт? Войти