SQL:Group By是不匹配的记录

时间:2016-12-02 00:18:25

标签: mysql sql group-by greatest-n-per-group

我正在努力获得群组中的最高版本。我的问题:

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

数据:

enter image description here

结果:

enter image description here

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

编辑,而不是重复:

这不是SQL Select only rows with Max Value on a Column的重复,这是我在写这篇文章之前已阅读和引用的帖子。我的问题是不是如何找到最大值,我的问题是为什么version与正确的ID不匹配

2 个答案:

答案 0 :(得分:2)

MySQL让您感到困惑,因为您的选择中的列不会出现在您的组中。要解决此问题,请确保您没有选择该组中的任何字段。

您不需要尝试在一个语句中获取所有内容,而是需要使用子查询来查找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 

答案 1 :(得分:-1)

修改:So MySQL allows it, but I don't think it's a good practise to use it

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

GROUP BY获取应该创建一组行的字段(在您的情况下,您对GROUP BY说的是:根据不同的group_id给我一个结果)并给出基于分组的结果(聚合数据)。

在这里,您尝试访问非聚合数据(在您的案例中为rubric_id)。出于某种原因,查询不会崩溃并在聚合数据中选择“随机”ID。