Это то, что, вероятно, было бы довольно легко кодировать решение, но сложнее выполнить sh в прямом SQL. Возможно, мне придется отказаться и кодировать подпрограмму, которая просматривает таблицу.
У меня есть таблица значений состояния пользователя с датами начала и окончания, которая выглядит следующим образом:
create table #t (userid int4, status varchar(15), start_time date, end_time date);
insert into #t values
(1, 'Active', '2019-08-15', '2019-08-20'),
(1, 'Active', '2019-08-20', '2019-08-22'),
(1, 'Active', '2019-08-22', '2019-09-22'),
(1, 'Inactive', '2019-09-22', '2019-10-22'),
(1, 'At Risk', '2019-10-22', '2019-11-22'),
(1, 'Lapsed', '2019-11-22', '2019-12-08'),
(1, 'Active', '2019-12-08', '2019-12-18'),
(1, 'Active', '2019-12-18', '2020-01-11'),
(1, 'Active', '2020-01-11', '2020-01-15'),
(1, 'Active', '2020-01-15', '2020-02-15'),
(1, 'Inactive', '2020-02-15', '2020-03-15')
;
I пытаюсь суммировать до минимальных / максимальных дат для каждой непрерывной группы значений состояния (при сортировке по времени начала), как показано ниже:

I Я пытался туда попасть, используя оконные функции в Redshift, но я не могу разделить на основе статуса, так как кажется, что это группирует статусы вместе, и я получаю «Active» с 2019-08-15 по 2020-02-15.