SQL: Group By 是不匹配的记录

SQL: Group By is mismatching records

我正在尝试获得组内的最高版本。我的查询:

SELECT 
    rubric_id, 
    max(version) as version,
    group_id
FROM    
    rubrics
WHERE
   client_id = 1 
GROUP BY
    group_id

数据:

结果:

ID 2 的标题没有 2 的版本,为什么不匹配?我需要做什么来纠正这个问题?

编辑,不重复:

这不是 SQL Select only rows with Max Value on a Column 的副本,后者是 post 我在写这篇文章之前阅读并参考过的。我的问题是而不是如何找到最大值,我的问题是为什么version没有匹配到正确的ID

编辑:So MySQL allows it, but I don't think it's a good practise to use it.

您正在尝试从聚合查询中查询非聚合数据。你不应该那样做。

A GROUP BY 采用它应该用来组成行组的字段(在你的情况下,你用 GROUP BY 说的是:给我一个不同 group_id 的结果)并根据分组给出结果(聚合数据)。

在这里,您尝试访问非聚合数据(rubric_id 在您的情况下)。由于某种原因,查询不会崩溃并在聚合数据中选择一个 "random" id。

MySQL 让您在 select 中有一个不在您的分组依据中的列而使您感到困惑。要解决此问题,请确保您没有 select 任何不在分组依据中的字段。

与其尝试在一条语句中获取所有内容,不如使用子查询来查找 max_version_id 然后加入它。

SELECT T.*
FROM rubrics T
JOIN
(
    SELECT 
        group_id, 
        max(version) as max_version
    FROM    
        rubrics
    GROUP BY
        group_id
) dedupe
 on T.group_id = dedupe.group_id
and T.version_id = dedupe.max_version_id
WHERE
    T.client_id = 1