2013-04-25 17 views
6

指定された2つの日付の間にすべての日付を生成する必要があります。これは、日付範囲が1つしかない限り正常に動作します。ただし、複数の日付範囲がある場合、このソリューションは機能しません。私はここでasktomを検索しましたが、関連するポインタ/ソリューションを見つけることができませんでした。2つの日付間の日付の生成

all_objectsとCONNECT BY ROWNUMを使用して両方のソリューションを試しましたが、運はありません。ここでは、問題文です:sqlfiddle

入力

ID START_DATE  END_DATE 
101 April, 01 2013 April, 10 2013 
102 May, 10 2013 May, 12 2013 

出力

ID Dates 
101 April, 01 2013 
101 April, 02 2013 
101 April, 03 2013 
101 April, 04 2013 
101 April, 05 2013 
101 April, 06 2013 
101 April, 07 2013 
101 April, 08 2013 
101 April, 09 2013 
101 April, 10 2013 
102 May, 10 2013 
102 May, 11 2013 
102 May, 12 2013 
+0

ここでもう一つ追加しなければならないのは、_t_dates_テーブルが、単純なテーブルではなく、複雑なものではなく、多くの情報を_ID_、_START_DATE_、_END_DATE_から離れているということです。 – Vishal

答えて

6
select 
    A.ID, 
    A.START_DATE+delta dt 
from 
    t_dates A, 
    (
    select level-1 as delta 
    from dual 
    connect by level-1 <= (
     select max(end_date - start_date) from t_dates 
    ) 
) 
where A.START_DATE+delta <= A.end_date 
order by 1, 2 
+0

ちょうど完璧..ありがとう。 – Vishal

3

てみてください:

select 
    distinct ID, 
    START_DATE+level-1 DATES 
from dual a, TABLE_DATES b 
connect by level <= (END_DATE-START_DATE)+1 
order by ID; 
+0

この解決策を試しましたが、これはうまくいきませんでした。私はt_datesテーブルを複雑なテーブルに置き換え、結果セットは適切ではありません。とにかく助けてくれてありがとう.. :) – Vishal

1
select g.cycle_dt 
     from 
      (select to_date(d,'DD-MM-YYYY') cycle_dt 
       from dual 
        model 
        dimension by (trunc(to_date('30092015', 'DDMMYYYY')) d) 
        measures (0 y) 
        rules (
        y[for d from trunc(to_date('30092015', 'DDMMYYYY')) to to_date('30102015', 'DDMMYYYY') increment 1]=0 
        )) g 
     order by g.cycle_dt; 
関連する問題