首页 > 解决方案 > [MySQL]如何排序然后分组?

问题描述

我有这样的表格和数据:

    id hour name
    1  0    a1
    1  1    a2
    1  2    a3
    1  3    a4
    2  1    a5
    2  1    a6 
    2  2    a7
    2  3    a8
    3  1    a9
    3  0    a10
    4  1    a11
    4  1    a12
    5  1    a13
    ……

我想找到一些像 (1,2,4 ....) 这样的 id 以及 id 的 max(hour) 和唯一的 id

结果如下:

id  hour  name
1   3     a4
2   3     a8
3   1     a9
4   1     a12
....

我尝试分组和排序,但失败了。怎么写?谢谢你。

第一次,当我写问题时会丢失一些信息,所以也许一些答案不是我想要的。所以我更新了这个问题。对不起,我第一次使用stackowverflow,对不起我的错误。

这是我的错误 sql:select * from tb where id in(1,2,3,4) group by id order by hour desc。

我知道如何编写正确的方法:

这是错误的:

select id, max(hour) from tb group by tb;

这是正确的:

SELECT a.id, a.maxhour, b.name FROM (SELECT id, max(hour) AS maxhour, name FROM tb where id in (1,2,3,4) GROUP BY id) a JOIN tb b ON a. id = b.id AND a.maxhour = b.hour

谢谢我所有的朋友。你的回答让我知道该怎么做

标签: mysqlgroup-bygreatest-n-per-group

解决方案


您需要使用聚合函数max()group by

SELECT id, MAX(hour) AS mhour FROM tablename
GROUP BY id
ORDER BY mhour DESC

您可以使用相关子查询

    SELECT id, hour, name FROM tablename a
        WHERE CAST(LTRIM(REPLACE(name,'a','')) AS int) IN (SELECT MAX(CAST(LTRIM(REPLACE(name,'a','')) AS int)) FROM tablename b WHERE a.id=b.id)
    ORDER BY hour DESC

推荐阅读