Я работаю в компании, которая просит меня создать список периодов за каждые 30 дней с момента запуска элемента до настоящего времени. Образец: Пункт «A» имеет дату начала 01/DEC/2016, а позиция «B» начинается с даты 05/Feb/2016. Сегодня 07/FEB/2017.Как сгенерировать периоды списка каждые 30 дней с начала до сегодняшнего дня
Вывод должен нравится:
**ITEM | START | END | PERIOD_NO**
----------------------------------------------
A |01/12/2016 |30/12/2016 |0
A |31/12/2016 |29/01/2017 |1
A |30/01/2017 |28/02/2017 |2
B |05/07/2016 |03/08/2016 |0
B |04/08/2016 |02/09/2016 |1
B |03/09/2016 |02/10/2016 |2
B |03/10/2016 |01/11/2016 |3
B |02/11/2016 |01/12/2016 |4
B |02/12/2016 |31/12/2016 |5
B |01/01/2017 |30/01/2017 |6
B |31/01/2017 |01/03/2017 |7
Вот мой код:
select
ITEM
, trunc(Start_Date+(level*30)-30) AS BEGIN
, CASE WHEN (Level-1) = 0 THEN trunc(Start_Date+(level*30) - 1) ELSE trunc(Start_Date+(level*30) -1) END AS END
, Level-1 AS Period
from
(
Select 'A' ITEM
,To_Date('05/07/2016', 'dd/MM/YYYY') Start_Date
, TRUNC(sysdate) END_Date
From Dual
/* UNION ALL
Select
'B' ITEM
, To_Date('01/02/2014', 'dd/MM/YYYY') Start_Date
, TRUNC(sysdate) END_Date
From Dual*/
) t
connect by level < (((END_DATE - START_DATE)/30) + 1)
Как это работает только для только одного элемента, я хотел бы обратиться к Вам за советом, как исправить его работает для 2 или более предметов.
Заранее спасибо.
Какую версию Oracle вы используете? – GurV