Note that there are some explanatory texts on larger screens.

plurals
  1. PO
    primarykey
    data
    text
    <p>My production code based on local guru advises and @Ben technique:</p> <pre> -- generate sequence 1..N: SELECT level FROM dual CONNECT BY level &lt;= 4; -- generates days: select to_date('01-01-2012','DD-MM-YYYY') + level - 1 from dual connect by level &lt;= to_date('31-12-2012','DD-MM-YYYY') - to_date('01-01-2012','DD-MM-YYYY') + 1; with dates as ( select (to_date('01-01-2012','DD-MM-YYYY') + level - 1) as daterange from dual connect by level &lt;= to_date('31-12-2012','DD-MM-YYYY') - to_date('01-01-2012','DD-MM-YYYY') + 1 ) select sum(tbl.cnt) as summ, trunc(dates.daterange, 'DDD') from dates left outer join DATA_TBL tbl on trunc(tbl.inc_date, 'DDD') = trunc(dates.daterange, 'DDD') group by trunc(dates.daterange, 'DDD') order by trunc(dates.daterange, 'DDD'); -- generates months: select ADD_MONTHS(to_date('01-01-2012','DD-MM-YYYY'), level - 1) from dual connect by level &lt;= months_between(to_date('31-12-2012','DD-MM-YYYY'), to_date('01-01-2012','DD-MM-YYYY')) + 1; with dates as ( select add_months(to_date('01-01-2012','DD-MM-YYYY'), level-1) as daterange from dual connect by level &lt;= months_between(to_date('31-12-2012','DD-MM-YYYY'), to_date('01-01-2012','DD-MM-YYYY')) + 1 ) select sum(tbl.cnt) as summ, trunc(dates.daterange, 'MM') from dates left outer join DATA_TBL tbl on trunc(tbl.inc_date, 'MM') = trunc(dates.daterange, 'MM') group by trunc(dates.daterange, 'MM') order by trunc(dates.daterange, 'MM'); -- generates quarters: select ADD_MONTHS(to_date('01-01-2012','DD-MM-YYYY'), (level-1)*3) from dual connect by level &lt;= months_between(to_date('31-12-2012','DD-MM-YYYY'), to_date('01-01-2012','DD-MM-YYYY'))/3 + 1; with dates as ( select add_months(to_date('01-01-2012','DD-MM-YYYY'), (level-1)*3) as daterange from dual connect by level &lt;= months_between(to_date('31-12-2012','DD-MM-YYYY'), to_date('01-01-2012','DD-MM-YYYY'))/3 + 1 ) select sum(tbl.cnt) as summ, trunc(dates.daterange, 'Q') from dates left outer join DATA_TBL tbl on trunc(tbl.inc_date, 'Q') = trunc(dates.daterange, 'Q') group by trunc(dates.daterange, 'Q') order by trunc(dates.daterange, 'Q'); -- generates years: select add_months(to_date('01-01-2007','DD-MM-YYYY'), (level-1)*12) from dual connect by level &lt;= months_between(to_date('31-01-2012','DD-MM-YYYY'), to_date('01-01-2007','DD-MM-YYYY'))/12 + 1; with dates as ( select add_months(to_date('01-01-2007','DD-MM-YYYY'), (level-1)*12) as daterange from dual connect by level &lt;= months_between(to_date('31-01-2012','DD-MM-YYYY'), to_date('01-01-2007','DD-MM-YYYY'))/12 + 1 ) select sum(tbl.cnt) as summ, trunc(dates.daterange, 'YYYY') from dates left outer join DATA_TBL tbl on trunc(tbl.inc_date, 'YYYY') = trunc(dates.daterange, 'YYYY') group by trunc(dates.daterange, 'YYYY') order by trunc(dates.daterange, 'YYYY'); </pre> <p>But <strong>connect by level</strong> is hack according to:</p> <ul> <li><a href="http://www.sqlsnippets.com/en/topic-11821.html" rel="nofollow">http://www.sqlsnippets.com/en/topic-11821.html</a> (Gotchas. To Use PRIOR or Not to Use PRIOR, That is the Question)</li> </ul>
    singulars
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. VO
      singulars
      1. This table or related slice is empty.
    2. VO
      singulars
      1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload