假设我有一个包含 ID 和版本的表。我按 id 分组。对于每个 id,如果 version = 2,则获取该行,否则获取 MAX(version)。
+----+---------+
| id | version |
+----+---------+
| 1 | 3 |
| 1 | 2 |
| 2 | 1 |
| 2 | 3 |
+----+---------+
应该获取
+----+---------+
| id | version |
+----+---------+
| 1 | 2 |
| 2 | 3 |
+----+---------+
查询应该是这样的:
select id, version(2 if exists for id or max) from table group by id;
我不想使用 union,因为它实际上是一个包含多个连接的巨大查询。我只是用了一个更简单的例子来说明这一点。
可能的解决方案:
select * from (select * from table order by version = 2 desc, version desc) as t1 group by id
最佳答案
1.获取version=2的行;
2.获取id不在version=2行中的最大版本行;
3.将他们联合起来。
然后试试这个:
SELECT id, version FROM table WHERE version = 2
UNION
SELECT id, MAX(version) version FROM table WHERE id not in
(SELECT id FROM table WHERE version = 2)
GROUP BY id
关于MySql:分组依据选择特定值或最大值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22703870/