有表如下table1  name     date                 ;  0011     2011-1-17             ss
  0011     2011-1-24             sss
  0022     2011-1-31             ddd
其中date 字段全是周一; 我的需求是 找出一段时间之内表中没有记录的数据;比如下面的SQL就是时间段2011-01-01到2011-02-07之间的所有周一的数据。select next_day(to_date('2011-01-03','yyyy-mm-dd')+(level-1)*7,2) monday
from dual
connect by next_day(to_date('2011-01-03','yyyy-mm-dd')+(level-1)*7,2) <= to_date('2011-02-07','yyyy-mm-dd')  上面SQL结果为 
         2011-1-10
         2011-1-17
         2011-1-24
         2011-1-31
         2011-2-7
那么name 为0011的人会有 三条数据 ,日期为2011-1-10,2011-1-31,2011-2-7,就是日期在table1中没有的数据,
name为0022的人有两条四条数据;
这个SQL怎么写啊?

解决方案 »

  1.   

    with temp as(
    select '0011' name,to_date('2011-01-17','yyyy-mm-dd') "date",'ss'  from dual
    union all
    select '0011' name,to_date('2011-1-24','yyyy-mm-dd') "date",'sss'  from dual
    union all
    select '0022' name,to_date('2011-1-31','yyyy-mm-dd') "date",'ddd'  from dual
    ),x as(
    select level lv from dual connect by level < 100
    )select name,date1,dates from(
    select name,"date" + lv -1 date1,to_char("date" + lv-1,'DAY') dates from temp,x order by name
    )where trim(dates)='MONDAY' and name='0022' and date1 >=to_date('2011-01-01','yyyy-mm-dd')
    and date1 <=to_date('2011-02-07','yyyy-mm-dd') order by name,dates
    如果不算2011-1-31的话,就加上not in限制条件