有一张表A
id   uid
1    23
2    23
3    23
4    45
5    45
6    54
7    54
.........
现在要找出每个uid的最大id所对应的记录
我写了下面这条SQL语句
select * from A where id in (select max(id) from A group uid);
为什么我运行这一条SQL语句的时候会很久都没有反应,A表还不到3万条数据,我用的是linux下的mysql。
但是如果我单独运行select max(id) from A group uid;的时候就可以很快地得出结果,请问是不是我写的SQL语句有问题??

解决方案 »

  1.   

    针对你提供的测试数据,下面的语句是最省事的。
    select max(id),uid from a group by uid
      

  2.   

    参考下贴中的多种方法http://topic.csdn.net/u/20091231/16/2f268740-391e-40f2-a15e-f243b2c925ab.html
    [征集]分组取最大N条记录方法征集,及散分....
      

  3.   

    select * from tt a where not exists(select 1 from tt where a.uid=uid and a.id<id)
      

  4.   

    请问是不是我写的SQL语句效率有问题,我是连接服务器的,运行语句运行到服务器断开了都还没有运行完
      

  5.   

    那试试这个。
    select u.*
    from A u,(select max(id) as id from A group uid) v
    where u.id=v.id