首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >基于多列选择最大值列行

基于多列选择最大值列行
EN

Stack Overflow用户
提问于 2016-02-20 12:57:24
回答 2查看 42关注 0票数 1

我有下表documents

代码语言:javascript
复制
+--------+-------------+------------+----------+---------+
| 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 |
+--------+-------------+------------+----------+---------+

我想得到的结果是:

代码语言:javascript
复制
+--------+-------------+------------+----------+---------+
| 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返回。

我想不出这个查询。需要帮助。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-02-20 13:00:18

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

代码语言:javascript
复制
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的话当真的话,或者可能只是

代码语言:javascript
复制
select t.*
from t join
     (select doc_type, max(version) as version
      from t
      group by doc_type
     ) tt
     using (doc_type, version);
票数 1
EN

Stack Overflow用户

发布于 2016-02-20 13:05:15

另一种选择

代码语言:javascript
复制
select *
from documents d
where not exists
  (
    select 1 from documents dv
    where dv.doc_type = d.doc_type
      and dv.version > d.version
  )

字面意思:“对于相同的值,没有更大的版本号”

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35523573

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档