似乎我在使用 MAX 时遇到了基本问题 - 我认为它混合了行的内容。
有一个 View :
id rev state
1 100 pass
1 99 fail
1 98 fail
结果应该是:
id rev state
1 100 **pass**
但我在下面的查询中得到了这个
id rev state
1 100 **fail**
SELECT r.id, r.state, MAX(r.revision)
FROM VIEW_data r
WHERE r.id=1
最佳答案
您需要一个带有聚合 MAX()
的 GROUP BY
子句。 MySQL 允许您省略它(其他 RDBMS 会报告错误的地方)但结果不确定,正如您所看到的那样。这可以通过加入一个子查询来处理,该子查询返回每个 id
的分组 rev
。
SELECT
r.id,
r.state,
maxrev.rev
FROM
VIEW_data r
/* INNER JOIN against subquery which returns MAX(rev) per id only */
JOIN (
SELECT id, MAX(rev) AS rev
FROM VIEW_data GROUP BY id
/* JOIN is on both id and rev to pull the correct value for state */
) maxrev ON r.id = maxrev.id AND r.rev = maxrev.rev
WHERE r.id = 1
http://sqlfiddle.com/#!2/4f651/8
以上将返回任何 id
的最大 rev
值。如果您确定您只需要由 WHERE
子句筛选的一行,而不是每组 MAX()
,请查看另一行使用 ORDER BY
和 LIMIT
的答案。
关于MySQL Max 函数混合行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16995786/