地元の第一人者のアドバイスと @Ben テクニックに基づく私の製品コード:
-- シーケンス 1..N を生成します。
SELECT レベル FROM デュアル CONNECT BY レベル <= 4;
-- 日を生成します。
to_date('01-01-2012','DD-MM-YYYY') + レベル - 1 を選択
デュアルから
レベルで接続 <= to_date('31-12-2012','DD-MM-YYYY') - to_date('01-01-2012','DD-MM-YYYY') + 1;
日付を (
(to_date('01-01-2012','DD-MM-YYYY') + レベル - 1) を日付範囲として選択します
デュアルから
レベルで接続 <= to_date('31-12-2012','DD-MM-YYYY') - to_date('01-01-2012','DD-MM-YYYY') + 1
) sum(tbl.cnt) を summ, trunc(dates.daterange, 'DDD') として選択
日付から
左外部結合 DATA_TBL tbl
on trunc(tbl.inc_date, 'DDD') = trunc(dates.daterange, 'DDD')
trunc(dates.daterange, 'DDD') でグループ化
並べ替え trunc(dates.daterange, 'DDD');
-- 月を生成します。
select ADD_MONTHS(to_date('01-01-2012','DD-MM-YYYY'), level - 1)
デュアルから
レベルで接続 <= months_between(to_date('31-12-2012','DD-MM-YYYY'), to_date('01-01-2012','DD-MM-YYYY')) + 1;
日付を (
日付範囲として add_months(to_date('01-01-2012','DD-MM-YYYY'), level-1) を選択します
デュアルから
レベルで接続 <= months_between(to_date('31-12-2012','DD-MM-YYYY'), to_date('01-01-2012','DD-MM-YYYY')) + 1
) sum(tbl.cnt) を summ, trunc(dates.daterange, 'MM') として選択
日付から
左外部結合 DATA_TBL tbl
on trunc(tbl.inc_date, 'MM') = trunc(dates.daterange, 'MM')
trunc(dates.daterange, 'MM') でグループ化
順番 trunc(dates.daterange, 'MM');
-- 四半期を生成します。
select ADD_MONTHS(to_date('01-01-2012','DD-MM-YYYY'), (レベル-1)*3)
デュアルから
レベルで接続 <= months_between(to_date('31-12-2012','DD-MM-YYYY'), to_date('01-01-2012','DD-MM-YYYY'))/3 + 1;
日付を (
日付範囲として add_months(to_date('01-01-2012','DD-MM-YYYY'), (level-1)*3) を選択します
デュアルから
レベルで接続 <= months_between(to_date('31-12-2012','DD-MM-YYYY'), to_date('01-01-2012','DD-MM-YYYY'))/3 + 1
) sum(tbl.cnt) を summ, trunc(dates.daterange, 'Q') として選択
日付から
左外部結合 DATA_TBL tbl
on trunc(tbl.inc_date, 'Q') = trunc(dates.daterange, 'Q')
trunc(dates.daterange, 'Q') でグループ化
並べ替え trunc(dates.daterange, 'Q');
-- 年を生成します。
select add_months(to_date('01-01-2007','DD-MM-YYYY'), (レベル-1)*12)
デュアルから
レベルで接続 <= months_between(to_date('31-01-2012','DD-MM-YYYY'), to_date('01-01-2007','DD-MM-YYYY'))/12 + 1;
日付を (
日付範囲として add_months(to_date('01-01-2007','DD-MM-YYYY'), (level-1)*12) を選択します
デュアルから
レベルで接続 <= months_between(to_date('31-01-2012','DD-MM-YYYY'), to_date('01-01-2007','DD-MM-YYYY'))/12 + 1
) sum(tbl.cnt) を summ, trunc(dates.daterange, 'YYYY') として選択
日付から
左外部結合 DATA_TBL tbl
on trunc(tbl.inc_date, 'YYYY') = trunc(dates.daterange, 'YYYY')
trunc(dates.daterange, 'YYYY') でグループ化
順番 trunc(dates.daterange, 'YYYY');
しかし、レベルごとに接続することは、次のようにハックされます。