私は今までアイテムを開始してから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