是否查询了今天尚未生成但昨天生成的报告?

时间:2014-03-27 06:54:07

标签: sql oracle

我正在尝试为

编写查询

查找今天尚未生成的报告,但昨天已生成。

我试过这个,但这不起作用。

select * from records where name not in 
(Select * from records where rdate to_date('26-03-2014','DD-MM-YYYY')) and 
and rdate=to_date('27-03-2014','DD-MM-YYYY')

SqlFiddle link

我应该获得包含记录aadd的输出。

2 个答案:

答案 0 :(得分:1)

请尝试:

select 
  * 
from 
  records 
where 
  rdate=to_date('26-03-2014','DD-MM-YYYY') and 
  name not in (Select name from records where rdate=to_date('27-03-2014','DD-MM-YYYY'))

答案 1 :(得分:1)

在这种情况下,left outer join优于not in

select * from records r1
  left join records r2 on
    r1.name = r2.name and
    r2.rdate = to_date('27-03-2014','DD-MM-YYYY')
  where r1.rdate = to_date('26-03-2014','DD-MM-YYYY') and r2.rdate is null

找到昨天运行的所有报告,然后加入今天运行的报告。使用where r2.rdate is null然后会排除今天与报告匹配的行,因此您将留下昨天但未在今天运行的行。

这样效率更高,因为not in重复执行子查询,而这只执行一个查询。

SQLFiddle