在MySQL中查找id最大值的行

Don*_*Msc 5 mysql max aggregate-functions

看看下面名为"文章"的MySQL表:

+----+-----------+---------+------------------------+--------------------------+
| id | articleId | version | title                  | content                  |
+----+-----------+---------+------------------------+--------------------------+
|  1 |         1 | 0.0     | ArticleNo.1 title v0.0 | ArticleNo.1 content v0.0 |
|  2 |         1 | 1.0     | ArticleNo.1 title v1.0 | ArticleNo.1 content v1.0 |
|  3 |         1 | 1.5     | ArticleNo.1 title v1.5 | ArticleNo.1 content v1.5 |
|  4 |         1 | 2.0     | ArticleNo.1 title v2.0 | ArticleNo.1 content v2.0 |
|  5 |         2 | 1.0     | ArticleNo.2 title v1.0 | ArticleNo.2 content v1.0 |
|  6 |         2 | 2.0     | ArticleNo.2 title v2.0 | ArticleNo.2 content v2.0 |
+----+-----------+---------+------------------------+--------------------------+
Run Code Online (Sandbox Code Playgroud)

我试图提出一个查询来返回Articles.id,其中Articles.version是最大数字.

实际的文章表包含10,000多个条目.

所以在这个例子中,我只想要返回Articles.id 4和6.我一直在寻找关键字distinct和函数max(),但似乎无法确定它.

任何建议赞赏......

T.J*_*der 6

MySQL手册中,这可以解决问题:

SELECT a1.id
FROM Articles a1
LEFT JOIN Articles a2 ON a1.articleId = a2.articleId AND a1.version < a2.version
WHERE a2.articleId IS NULL;
Run Code Online (Sandbox Code Playgroud)

从链接手册:

LEFT JOIN基础上工作,当s1.price a1.version 在它的 最大值 最低价值,没有s2.price a2.version 用一个 更大 较小的价值因而相应的s2.article a2.articleId价值是NULL.

(我编辑了他们的文字符合您的情况.)


sou*_*rge 5

您需要在此处进行子查询:

SELECT a.id, a.version
FROM articles a
WHERE a.version = (
    SELECT MAX(version)
    FROM articles b
    WHERE b.articleId = a.articleId
)
Run Code Online (Sandbox Code Playgroud)