mysql - 根据多列选择最大值列行

标签 mysql sql

我有下表文档

+--------+-------------+------------+----------+---------+
| doc_id | module_name | mapping_id | doc_type | version |
+--------+-------------+------------+----------+---------+
|      5 | asdf        | asd        | POI      |       1 |
|      6 | asdf        | asd        | POI      |       2 |
|      7 | asdf        | asd        | CAF      |       1 |
|      8 | asdf        | abc        | POI      |       1 |
|      9 | asdf        | abc        | ISR      |       1 |
|     10 | asdf        | abc        | ISR      |       2 |
|     11 | asdf        | xyz        | POA      |       1 |
|     12 | asdf        | xyz        | CAF      |       1 |
|     13 | asdf        | xyz        | CAF      |       2 |
|     14 | asdf        | xyz        | CAF      |       3 |
|     15 | pqrs        | asd        | POI      |       1 |
|     16 | pqrs        | asd        | POI      |       2 |
|     17 | pqrs        | asd        | CAF      |       1 |
|     18 | pqrs        | abc        | POI      |       1 |
|     19 | pqrs        | abc        | ISR      |       1 |
|     20 | pqrs        | abc        | ISR      |       2 |
|     21 | pqrs        | xyz        | POA      |       1 |
|     22 | pqrs        | xyz        | CAF      |       1 |
|     23 | pqrs        | xyz        | CAF      |       2 |
|     24 | pqrs        | xyz        | CAF      |       3 |
+--------+-------------+------------+----------+---------+

我想得到如下结果:

+--------+-------------+------------+----------+---------+
| doc_id | module_name | mapping_id | doc_type | version |
+--------+-------------+------------+----------+---------+
|      6 | asdf        | asd        | POI      |       2 |
|      7 | asdf        | asd        | CAF      |       1 |
|      8 | asdf        | abc        | POI      |       1 |
|     10 | asdf        | abc        | ISR      |       2 |
|     11 | asdf        | xyz        | POA      |       1 |
|     14 | asdf        | xyz        | CAF      |       3 |
|     16 | pqrs        | asd        | POI      |       2 |
|     17 | pqrs        | asd        | CAF      |       1 |
|     18 | pqrs        | abc        | POI      |       1 |
|     20 | pqrs        | abc        | ISR      |       2 |
|     21 | pqrs        | xyz        | POA      |       1 |
|     24 | pqrs        | xyz        | CAF      |       3 |
+--------+-------------+------------+----------+---------+

max 版本号行应结合 module_namemapping_iddoc_type 返回。

我无法理解查询。需要帮助。

最佳答案

在大多数数据库中,您会使用row_number()。在 MySQL 中,这是不可用的。一种方法是joingroup by:

select t.*
from t join
     (select module_name, mapping_id, doc_type, max(version) as version
      from t
      group by module_name, mapping_id, doc_type
     ) tt
     using (module_name, mapping_id, doc_type, version);

如果我们从字面上理解 OP 的评论,或者可能只是

select t.*
from t join
     (select doc_type, max(version) as version
      from t
      group by doc_type
     ) tt
     using (doc_type, version);

关于mysql - 根据多列选择最大值列行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35523573/

相关文章:

mysql - DBD::mysql::st 执行失败:表 '' 不存在

sql - 通配符搜索数字范围

sql - 国家/地区电话代码,包括区号

php - 查询按 "date"字段排序的两张表

MYSQL选择查询包括所有如果没有指定

php - 在外部存储过程中使用 MySQL 变量

MySQL 数据库模式创建者和所有者关系?例如用户和媒体?

c# - MySqlClient.NativeDriver 中的 NullReferenceException

没有单独的 SELECT 查询的 PHP MySQL 更新减去变量

MySQL InnoDB - 如何使表仅附加?