id   userid   time  
-------------------
1     001     2010-03-01
2     001     2010-03-02
3     001     2010-03-03
4     001     2010-03-05
5     001     2010-03-11
6     001     2010-03-13
7     002     2010-03-03
8     002     2010-03-05
9     002     2010-03-13
10    002     2010-03-15
11    002     2010-03-21
12    002     2010-03-23
13    003     2010-04-03
14    003     2010-04-05
15    004     2010-04-08
16    004     2010-04-09
17    005     2010-04-11
18    005     2010-04-13
表结构如上
我想从这张表中查出每个人最后登录时间(也可以说是几个userid中ID最大的记录)
得到如下结果
id   userid   time  
-------------------
6     001     2010-03-13
12    002     2010-03-23
14    003     2010-04-05
16    004     2010-04-09
18    005     2010-04-13
请问此语句怎么写?因为这张表很大  考虑到效率问题 如何解决呢?

解决方案 »

  1.   

    max id 也可 max time也可 最后按照userid group by 
      

  2.   

    select a.* from tt a inner join
    (select userid,max(time) as ma from tt group by userid) b
    on a,userid=b.userid and a.time=b.ma
      

  3.   

    or
    select a.* from tt a where not exists(select 1 from tt where userid=a.userid and a.time<time)
      

  4.   

    我想用ID查询会快一点
    select t.* from tb t where ID = (select max(ID) from tb where userid = t.userid )
      

  5.   

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

  6.   

    select id, max(userid) from tableName group by userid
      

  7.   

    刚刚回答弄错了
    select id, max(time) from tableName group by userid这样你事试一试  在我这里是好用的好用的话记的结帖
      

  8.   

    这样写就是对了哈。SELECT id,userid,MAX(`time`) FROM tableName GROUP BY userid ORDER BY `time` DESC