我有这样的表和数据:
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: 从tb中选择*,其中(1,2,3,4)中的id按小时顺序按id顺序分组。
我知道如何编写正确的方法:
这是错误的:
从tb组中按tb选择id,max(hour);
这是正确的:
选择a.id,a.maxhour,b.name 来自( SELECT id,max(hour)AS maxhour,名称 从tb 在(1,2,3,4)中的id 按ID分组) 在a.id = b.id和a.maxhour = b.hour上加入tb b
谢谢我所有的朋友。 您的回答使我知道该怎么做
答案 0 :(得分:3)
您需要使用聚合函数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
答案 1 :(得分:0)
SELECT id,max(hour) as hour FROM table_name group by id order by id,hour desc;
尝试此查询。
答案 2 :(得分:0)
这看起来就像您只想获取每个id
组的最大小时值。假设您使用的是MySQL 8+或更高版本,这是使用解析函数执行此操作的一种方法:
WITH cte AS (
SELECT *, ROW_NUMBER() OVER (PARTITION BY id ORDER BY hour DESC) rn
FROM yourTable
)
SELECT id, hour
FROM cte
WHERE rn = 1
ORDER BY hour DESC;