У меня есть пример таблицы ниже.Мой пример может иметь много cust_assgn_dts.
Цель состоит в том, чтобы создать цикл начала и окончания цикла для каждой даты.
ID CustID Start_DT End_dt Role Cust_Assgn_dt CustIds
1 101 10/10/2018 11/13/2018 Primary 10/10/2018 8:35:24 98456
1 101 10/10/2018 11/13/2018 Primary 10/10/2018 2:09:52 14687
1 101 10/10/2018 11/13/2018 Primary 11/01/2018 2:10:42 15887
1 101 10/10/2018 11/13/2018 Secondary 11/13/2018 9:12:00 15489
1 101 10/10/2018 11/13/2018 Scheduler 10/10/2018 8:35:24 26987
1 101 10/10/2018 11/13/2018 Scheduler 10/10/2018 2:09:52 26598
Ожидаемый результат: (Первый StartCycle всегда будет датой Start_dt). EndCycle будет днем раньше следующей даты)
ID StartCycle EndCycle Scheduler Primary Secondary Start_dt End_dt
1 10/10/2018 10/31/2018 26598 14687 10/10/2018
1 11/01/2018 11/12/2018 26598 15887 10/10/2018
1 11/13/2018 12/31/9999 26598 15887 15489 10/10/2018 11/13/2018
Мой текущий запрос:
SELECT *
FROM (
SELECT *
FROM (
SELECT
A.ID,
A.CUSTID
A.START_DT,
A.END_DT,
A.CUSTIDS,
A.ROLE
,TRUNC(A.CUST_ASSGN_DT) AS CUST_ASSGN_DT
,DENSE_RANK() OVER (PARTITION BY ID,ROLE, TRUNC(CUST_ASSGN_DT) ORDER BY CUST_ASSGN_DT DESC) RNK
FROM A
WHERE 1=1
AND A.ID = 101
)
WHERE 1=1
AND RNK = 1
)
PIVOT
(
MAX(CUSTIDS)
FOR ROLE IN ('SCHEDULER' AS SCHEDULER,'PRIMARY' AS PRIMARY,'SECONDARY' AS SECONDARY)
)
Это дает мне роли на cust_assgn_dt, но НЕ дает мне никаких циклов.
Правильно ли я поступаю по этому поводу, или у меня должен быть другой подход?Я использую программное обеспечение PL / SQL, но пишу это в SQL оракула.