У меня есть таблица с информацией об участии в сервисе для группы людей, как в приведенном ниже коде, который я запускаю в Oracle.
CREATE TABLE SRVC_EPISODES
(
CASE_INDEX NUMBER (10),
CLIENT_ID NUMBER (10),
SRVC_ID NUMBER (10),
SRVC_START_DT DATE,
SRVC_END_DT DATE,
SRVC_END_REASON VARCHAR2 (70 BYTE)
);
INSERT INTO SRVC_EPISODES VALUES (1, 1, 3747, TO_DATE('03/28/2017', 'mm/dd/yyyy'), TO_DATE('06/27/2017', 'mm/dd/yyyy'), 'Full Completion');
INSERT INTO SRVC_EPISODES VALUES (2, 1, 5231, TO_DATE('02/16/2018', 'mm/dd/yyyy'), TO_DATE('06/30/2018', 'mm/dd/yyyy'), 'Service Transfer');
INSERT INTO SRVC_EPISODES VALUES (3, 1, 3929, TO_DATE('07/01/2018', 'mm/dd/yyyy'), TO_DATE('07/01/2018', 'mm/dd/yyyy'), 'Service Transfer');
INSERT INTO SRVC_EPISODES VALUES (4, 1, 6688, TO_DATE('07/13/2018', 'mm/dd/yyyy'), TO_DATE('10/19/2018', 'mm/dd/yyyy'), 'Full Completion');
INSERT INTO SRVC_EPISODES VALUES (5, 2, 73, TO_DATE('10/03/2017', 'mm/dd/yyyy'), TO_DATE('06/30/2018', 'mm/dd/yyyy'), 'Service Transfer');
INSERT INTO SRVC_EPISODES VALUES (6, 2, 201, TO_DATE('05/07/2018', 'mm/dd/yyyy'), TO_DATE('06/30/2018', 'mm/dd/yyyy'), 'Service Transfer');
INSERT INTO SRVC_EPISODES VALUES (7, 2, 8102, TO_DATE('06/02/2018', 'mm/dd/yyyy'), TO_DATE('06/30/2018', 'mm/dd/yyyy'), 'Service Transfer');
INSERT INTO SRVC_EPISODES VALUES (8, 2, 4164, TO_DATE('07/01/2018', 'mm/dd/yyyy'), TO_DATE('03/20/2019', 'mm/dd/yyyy'), 'Incomplete');
INSERT INTO SRVC_EPISODES VALUES (9, 2, 2066, TO_DATE('07/01/2018', 'mm/dd/yyyy'), TO_DATE('12/02/2019', 'mm/dd/yyyy'), 'Failed Classes');
Проблема, с которой я сталкиваюсь, заключается в том, что часто человек будет передавать провайдеров на полпути через их услуги, как указано различными SRVC_ID и предшествующими SRVC_END_REASON, при сортировке по CLIENT_ID -> SRVC_START_DT -> SRVC_END_DT.
В приведенном ниже примере CLIENT_ID # 1 имеет два разных эпизода обслуживания - один, который произошел с 28.03.2017 по 27.06.2017, который они успешно завершили. Однако их следующая услуга проходила с тремя разными провайдерами (три разных идентификатора услуги) и проходила с 16.02.2008 по 19.10.2008, которую они также успешно завершили.
CLIENT_ID # 4 также имеет два отдельных сервисных эпизода. Первый состоялся с 3.10.2017 и завершился 20.03.2009 с неполным. Их следующий сервисный эпизод проходил с 01.07.2008 по 02.12.2009, но они провалились. Несмотря на то, что это может быть трудно понять, CASE_INDEX # 9 - это другая служба, поскольку предыдущая служба не имела «передачу» в качестве причины завершения службы (сгруппирована по CLIENT_ID, затем отсортирована по SRVC_START_DT, затем SRVC_END_DT).
Я бы сказал, что самая большая проблема, с которой я сталкиваюсь, заключается в том, что количество переводов для каждого клиента не является фиксированным, если они вообще имеют какие-либо переводы. Если нам нужно, давайте предположим, что максимальное количество передач будет 5.
Я знаю, что решение этого заключается в использовании опережения / отставания, но я после большой борьбы не могу понять, как. Моя конечная цель - иметь правильные SRVC_START_DT, SRVC_END_DT и SRVC_END_REASON, как в примере ниже.
