有这样一个表T,主键是“编号 A”和“履历编号 B“, 有如下数据:
A   B   
1   1  
1   2
1   3
2   1
2   2
如何确定一条数据,我现在是这么做的
SELECT T.*
FROM T
WHERE A=参数 AND
      B=(SELECT MAX(T.B) 
             FROM T
             GROUP BY A )
这样写很费时间,希望大家给点意见,有没有好办法提高一下性能。

解决方案 »

  1.   

    select * from (select a,b,row_number(partition by a order by b desc) rn from t) where a=参数
    and rn=1
      

  2.   

    select a,b from (select a,b,row_number() over(partition by a order by b desc) rn from t) where a=参数 
    and rn=1
      

  3.   


    select A , max(B) B from T where A = '参数' group by A
      

  4.   

    B=(SELECT MAX(T.B) 
                FROM T 
                GROUP BY A ) ---你这句返回的可能是多个值啊,是不是写错了?
      

  5.   

    select max(B)
     from (select B from T where A = '参数')如果还是慢,那看看执行计划吧,用到索引没
      

  6.   

    -- TRY IT ..   BUILD THE INDEX IN COLUMN A.
    SELECT *
      FROM TT T1
     WHERE NOT EXISTS (SELECT 1
              FROM TT T2
             WHERE T1.A = T2.A
               AND T1.B < T2.B)
       AND T1.A = 参数;
      

  7.   

    mantisXF你这个用法我总是绕不过圈来,呵呵.
      

  8.   

    楼主用的B=(SELECT MAX(T.B)
    FROM T
    GROUP BY A )会返回好多条记录
      

  9.   

    mantisXF  可否给大家讲解一下你写那条sql
      

  10.   

    select t1.* from t t1 where a=对数 and B=(select max(t2.b) from t t2 where t2.A=t1.A)
    消除gorup by,应该会快点