相关疑难解决方法(0)

SQL仅选择列上具有最大值的行

我有这个文件表(这里是简化版):

+------+-------+--------------------------------------+
| id   | rev   | content                              |
+------+-------+--------------------------------------+
| 1    | 1     | ...                                  |
| 2    | 1     | ...                                  |
| 1    | 2     | ...                                  |
| 1    | 3     | ...                                  |
+------+-------+--------------------------------------+
Run Code Online (Sandbox Code Playgroud)

如何为每个id选择一行并且只选择最大转速?
使用上面的数据,结果应该包含两行:[1, 3, ...][2, 1, ..].我正在使用MySQL.

目前,我在while循环中使用检查来检测并覆盖结果集中的旧转速.但这是实现结果的唯一方法吗?是不是有SQL解决方案?

更新
作为答案提示,有一个SQL的解决方案,并且这里sqlfiddle演示.

更新2
我注意到在添加上述sqlfiddle之后,问题被投票的速率超过了答案的upvote率.那不是故意的!小提琴是基于答案,特别是接受的答案.

mysql sql aggregate-functions greatest-n-per-group groupwise-maximum

1142
推荐指数
14
解决办法
107万
查看次数

检索每个组中的最后一条记录 - MySQL

有一个表messages包含如下所示的数据:

Id   Name   Other_Columns
-------------------------
1    A       A_data_1
2    A       A_data_2
3    A       A_data_3
4    B       B_data_1
5    B       B_data_2
6    C       C_data_1
Run Code Online (Sandbox Code Playgroud)

如果我运行查询select * from messages group by name,我会得到如下结果:

1    A       A_data_1
4    B       B_data_1
6    C       C_data_1
Run Code Online (Sandbox Code Playgroud)

什么查询将返回以下结果?

3    A       A_data_3
5    B       B_data_2
6    C       C_data_1
Run Code Online (Sandbox Code Playgroud)

也就是说,应返回每组中的最后一条记录.

目前,这是我使用的查询:

SELECT
  *
FROM (SELECT
  *
FROM messages
ORDER BY id DESC) AS x
GROUP BY name
Run Code Online (Sandbox Code Playgroud)

但这看起来非常低效.还有其他方法可以达到相同的效果吗?

mysql sql group-by greatest-n-per-group

887
推荐指数
17
解决办法
58万
查看次数