我正在尝试获取具有某列最大值的行。通常我会为此使用 Rank 并选择 rank = 1 但是当我知道我只需要一列的最大值时这似乎毫无意义。这是我的 SQL:
SELECT
name,
value,
MAX(version)
FROM
my_table t
WHERE
person_type = "STUDENT"
GROUP by NAME,VALUE
HAVING version = max(version)
这会在尝试运行时返回“您做错了涉及分组错误”,即“不是 GROUP BY 表达式”。如果我按字段将版本添加到组中,则此 SQL 会运行,但它显然会返回所有行,而不仅仅是每个行的最大版本。
所以我的问题主要是“为什么这不起作用?” 我正在选择版本的最大值,所以我不明白为什么我需要按它分组。我知道还有其他解决方案(分区,排名......),但我更感兴趣的是为什么这在语法上特别有缺陷。
编辑:更明确地使用这个有子句。
假设表 t 中有这两行:
NAME VALUE VERSION
JEREMY C 1
JEREMY A 2
此查询返回的内容应该是:
JEREMY A 2
但是,如果我删除了,那么我会得到:
JEREMY A 2
JEREMY C 2