id                 user                           number
1                   test                              34
2                   qq                                12
3                   test                              56
4                   test                              3
5                   qq                                1
6                   bb                                9现需要找出同一user里number最大的id,user,number是多少。。
也就是想得到这样的结果:id                 user                           number
3                 test                            56
2                 qq                              12
6                 bb                              9
我目前写法是
SELECT id,user,number 
FROM table
WHERE number= max(number) 
GROUP BY user但是出错。。

解决方案 »

  1.   

    SELECT user,max(number) 
    FROM table
    GROUP BY user
      

  2.   

    try:SELECT id,user,max(number) as number
    FROM table GROUP BY user;
      

  3.   

    id 会有歧义比如:
    id user number
    1 test 34
    2 qq 12
    3 test 56
    4 test 56
    5 qq 1
    6 bb 9
    那么test 56取哪个id?(3?4?)
      

  4.   

    大家的办法都不行,其中foolbirdflyfirst(湖水清澈)的办法找出来的user和number都对,但是id未必是最大number所对应的id
      

  5.   

    因为group by user 后,id就未必是max(number)所对应的id了,而是group by user后那组数据的第一个id
      

  6.   

    oracle 中可以这样写:
    select *
      from (select id,
                   user,
                   number,
                   row_number() over(partition by user order by number desc) as thenumber
              from table) tmp
     where tmp.thenumber = 1
      

  7.   

    如果是mysql,貌似要用2条语句才能解决
      

  8.   

    是mysql,怎么那么痛苦要2条sql才能解决啊。
    应该有办法的吧
      

  9.   

    呵呵 ,那就再max一下id试试
    SELECT max(id) as id,user,max(number) as number
    FROM table GROUP BY user;
      

  10.   

    想了个办法,好像
    SELECT id,user,max(number) as number
    FROM table GROUP BY user order by number desc;
    这样就可以了
      

  11.   

    SELECT Max(id),user,Max(number), FROM 表 GROUP BY user你自己仔细测测这条语句,看看到底是你说的第一个id还是最大的一个。
      

  12.   

    你补充的  order by number desc  是在聚合之后再排序,并非聚合之前排序。
      

  13.   

    select a.id,a.user,a.number from test_sql a,
    (select user,max(number) as number from test_sql b group by user) b
    where a.user=b.user and a.number=b.number
      

  14.   

    前一段时间我也被这个问题困扰了N久,上网问了很多人和找了很多资料都没解决,于是狠下心来自己研究,总算解决了,用一个子查询就ok了。代码如下:
    select * from user where number in (select max(number) number from user group by user);如果还要排序的话,就在后面加个order by吧。select * from user where number in (select max(number) number from user group by user) order by number DESC;
      

  15.   

    id                 user                           number
    1                   test                              34
    2                   qq                                12
    3                   test                              56
    4                   test                              3
    5                   qq                                1
    6                   bb                                9
    7                   test                               null
    该如何处理?
      

  16.   


    前一段时间我也被这个问题困扰了N久,上网问了很多人和找了很多资料都没解决,于是狠下心来自己研究,总算解决了,用一个子查询就ok了。代码如下:
    select * from user where number in (select max(number) number from user group by user);如果还要排序的话,就在后面加个order by吧。select * from user where number in (select max(number) number from user group by user) order by number DESC;  
    不行,不同user的number可能重复