oracle 有一张表A,表中有 a,b,c,d,字段,b字段为日期型,c和其他字段为字符型,在A表中a   b   c     d     1   4   10   cc    0   5   10    ee2   6   11   dd    2   7   12   dd3   8   12   cd    因为A表中存在c字段有相同值,而b字段值不同,但是我想取出以b字段最大的日期c字段唯一的一条记录比如说前两行记录,c 字段相同,而b字段不同,判断b字段中的最大的那一行记录!如果c字段是唯一的,那么就直接出去来。则取出的结果如下:a   b   c     d       0   5   10    ee2   6   11   dd    3   8   12   cd    
请问用那种方法才可以做到!希望能提供例子!
我是菜鸟请多多指教!

解决方案 »

  1.   

    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;
    同样建上面的组合索引
    比较一下执行计划,选择表现较好的那个
      

  2.   

    把执行计划和统计信息贴出来share下吧
      

  3.   

    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;
    这个有用