我有下表文档
+--------+-------------+------------+----------+---------+
| 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_name
、mapping_id
和 doc_type
返回。
我无法理解查询。需要帮助。
最佳答案
在大多数数据库中,您会使用row_number()
。在 MySQL 中,这是不可用的。一种方法是join
和group 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/