table_a
----------------------
id orderNum  value
1    a001     v001
2    a001     v002
table_b
----------------------
id orderNum   status
1    a001     a
2    a001     b
3    a001     c
4    b001     d
5    b001     e这是我想到的办法,虽然可以运行,可是在table_b表的数据很多的时候,效率很慢,目前测试20多万的数据,感觉速度已经不可接受。请高手支招!!!谢谢了。select * from table_a a,
  (select * from table_b b where b.id in(select max(id) from table_b c group by orderNum)) d where a.orderNum=d.orderNum

解决方案 »

  1.   

    table_a
    ----------------------
    id orderNum value
    1  a001      v001
    2  b001      v002上面的table_a应该是这个数据。大概是这样,a,b,c,d等表以orderNum关联查询,其中可能有的表数据有重复,要求取id最大的记录
      

  2.   

    方法一 
    select * from table_a a,
     table_b b ,
    (select max(id) id from table_b c group by orderNum)) c where a.orderNum=d.orderNum
           and b.id  = c.id方法二正在想 
      

  3.   

    select a.id,a.ordernum,a.value,b.status
    from a,(
    select ordernum ,status,row_number()over(partition by ordernum order by id desc)row_num
    from c)b
    where a.ordernum = b.ordernum and b.row_num=1;
    不敢保证有你的sql效率高。你还是在执行的时候看看执行计划吧。
      

  4.   

    逻辑有问题:where b.id in(select max(id) from table_b c group by orderNum)取出来结果是错的.
      

  5.   

    where (ordernum,id) in(select ordernum, max(id) id from table_b c group by orderNum)并对(ordernum,id)建立复合索引,速度肯定是超快.