我正在努力获得群组中的最高版本。我的问题:
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的重复,这是我在写这篇文章之前已阅读和引用的帖子。我的问题是不是如何找到最大值,我的问题是为什么version
与正确的ID
不匹配
答案 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。