select * from t group by username order by logtime descMySQL对上述语句的处理方式是: 先群组,群组后再排序
但是我现在想排序后再群组该如何解决呢?
---------
ps.用如下方式可以解决, 但是感觉效率太低, 不知道还有没有更好的办法!
谢谢大家!select * from (select * from t order by logtime desc) t2 group by username

解决方案 »

  1.   

    select * from t where  logtime  in (select max(logtime ) from t group by username)这样效率应该高点。取消了order by 的filesort过程。
      

  2.   

    我的那个,需要logtime 改为主键
      

  3.   

    感谢"yangxiao_jiang(哈哈)", 但是仍然求更好的解决方法
    yueliangdao0608((深圳PHPER,MSN:[email protected]))
    -------------
    谢谢你的回复,但是我求的是解决方法
      

  4.   

    TO ChumpKlutz(朽木) 
    --------难道一样? 细细考虑一下
      

  5.   

    我以前google别的时候无意中见过这个问题,解决起来也是嵌套的办法,有点复杂.具体地址记不起来了.
      

  6.   

    这个问题见你问几天了.
    兄弟,你都是星星了.好像不见你有查google啊.
    这是我查询的结果.
    select max(log_time),user_name from table_name group by user_name order by max(log_time);
    好用的话,别忘了给分.
      

  7.   

    楼上的理解错误 ;-)你的排序只是对group by之后的结果进行地排序
    而我是需要group by出最大的一行
      

  8.   

    你想要同一组里面最大的那个值对不?
    我可是试过的哦.你为什么不试试呢?
    mysql> select id,user_id from d;
    +------+---------+
    | id   | user_id |
    +------+---------+
    |    1 |       7 |
    |    2 |       8 |
    |    3 |       9 |
    |    4 |       7 |
    |    5 |       9 |
    +------+---------+
    5 rows in set (0.00 sec)mysql> select max(id),user_id from d group by user_id order by max(id);
    +---------+---------+
    | max(id) | user_id |
    +---------+---------+
    |       2 |       8 |
    |       4 |       7 |
    |       5 |       9 |
    +---------+---------+
    3 rows in set (0.00 sec)
      

  9.   

    To 小李+------+---------+--------+
    | id   | user_id |  other |
    +------+---------+--------+
    |    1 |       7 |      8 |
    |    2 |       8 |      2 |
    |    3 |       9 |      3 |
    |    4 |       7 |      4 |
    |    5 |       9 |      5 |
    +------+---------+--------+我想把与最大ID同行的other字段的值也取出, 用你的语句是取不到的
      

  10.   

    select max(id),column_1,column_2............ from d group by user_id order by max(id);
    如果你非要select *这种办法,
    当我没有说过好了.
      

  11.   

    TO LZ:用wildlily980的方法。加上一个字段就可以了。你自己不加吗??select   max(id),user_id,other from   d   group   by   user_id,other order   by   max(id); 
      

  12.   

     TO版主:
    我那个方法,某些情况下可能是可以的。对于楼主的情况可能不能正常工作。前一阵子看了一下。可能还需要一个子查询。因为对于他列出的第三项other,mysql可能会选出一个随机结果。而不是对应的最大的id 列。
      

  13.   

    我看你想提高效率的话就加个LIMIT语句限制一下。
      

  14.   

    这里的可以看看:
    http://nalai.net/content/view/305072/32/
      

  15.   

    下面的SQL语句可以解决,我碰到同样的问题已经搞定了SELECT max(id) as mid, d.*  FROM d GROUP BY user_id HAVING id=mid查了MYSQL手册,having作为group by 后的筛选条件 可以用聚合函数作为条件,不同于where max(id) 取得user_id相同的多行数据中最大的id,然后要把这整行数据取出来,用having最为筛选条件就可以了执行顺序应该是 where > group by > having