Собесов

Альфа-Банк SQL — периоды действия сегментов клиента (gaps and islands)

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);

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

ClientID SegmentID start_date end_date
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 на выбор.

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