有表如下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怎么写啊?
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怎么写啊?
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限制条件