MySql:分组依据选择特定值或最大值

标签 mysql

假设我有一个包含 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

SQL Fiddle

关于MySql:分组依据选择特定值或最大值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22703870/

相关文章:

php - 在 PHP 中显示 GMT 偏移量

php - 推进 2.0 模型 :build cannot find database

php - 如何防止使用 codeigniter 为每个 parent 将重复的 child 记录到数据库?

mysql - Asterisk 与 MySQL

mysql: CONCAT_WS 从其他表中选择

php - 如果记录在一张表中,如何显示名称而不是 ID?

mysql - 停止 promise 链中的另一个 .then() 执行

java - Hibernate 模板中的动态表创建

Mysql-unicode 字符可以,但重音符号不行

mysql - SQL从每个组中获取最大值