日期:2014-05-17  浏览次数:20799 次

oracle同表比较!急急急急急!
oracle 有一张表A,表中有 a,b,c,d,字段,b字段为日期型,c和其他字段为字符型,在A表中

a b c d  

1 4 10 cc  

0 5 10 ee

2 6 11 dd  

2 7 12 dd

3 8 12 cd  

因为A表中存在c字段有相同值,而b字段值不同,但是我想取出以b字段最大的日期c字段唯一的一条记录

比如说前两行记录,c 字段相同,而b字段不同,判断b字段中的最大的那一行记录!

如果c字段是唯一的,那么就直接出去来。则取出的结果如下:

a b c d  

0 5 10 ee

2 6 11 dd  

3 8 12 cd  


请问用那种方法才可以做到!希望能提供例子!
我是菜鸟请多多指教!


------解决方案--------------------
select * from a t1
where not exists(select null from a t2 where t1.c=t2.c and t1.b<t2.b)

对b,c字段建一个组合索引,顺序是(c,b)

或者用
select max(a) keep(dense_rank last order by b)a,
max(b) b,
c,
max(d)keep(dense_rank last order by b) d
from a
group by c;
同样建上面的组合索引
比较一下执行计划,选择表现较好的那个