【发布时间】:2011-12-06 10:23:34
【问题描述】:
我有这张文件表(这里是简化版):
| id | rev | content |
|---|---|---|
| 1 | 1 | ... |
| 2 | 1 | ... |
| 1 | 2 | ... |
| 1 | 3 | ... |
如何为每个 id 选择一行并且只选择最大的 rev?
有了上面的数据,结果应该包含两行:[1, 3, ...] 和[2, 1, ..]。我正在使用 MySQL。
目前我在while 循环中使用检查来检测和覆盖结果集中的旧转速。但这是实现结果的唯一方法吗?没有SQL解决方案吗?
【问题讨论】:
-
行需要对应的
content字段吗? -
是的,这不会造成任何问题,我已经剪掉了很多列,我会加回来。
-
@MarkByers 我已经编辑了我的答案以符合 OP 的需求。既然来了,就决定在greatest-n-per-group这个话题上写一个更全面的答案。
-
这是常见的greatest-n-per-group 问题,经过充分测试和optimized solutions。我更喜欢left join solution by Bill Karwin(original post)。请注意,可以在最官方的来源之一 MySQL 手册 中找到许多解决这个常见问题的方法!见Examples of Common Queries :: The Rows Holding the Group-wise Maximum of a Certain Column。
标签: mysql sql aggregate-functions greatest-n-per-group groupwise-maximum