mysql - [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
谢谢我所有的朋友。你的回答让我知道该怎么做
解决方案
您需要使用聚合函数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