似乎我在使用MAX时遇到了根本问题 - 我认为它混合了行的内容。
有一个视图:
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
答案 0 :(得分:1)
您需要一个GROUP BY
子句,其中包含MAX()
汇总。 MySQL允许你省略它(其他RDBMS报告错误的地方),但是你看到的结果不确定。这可以通过加入子查询来处理,该子查询返回按rev
分组的id
。
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
以上内容将返回任何rev
的最大id
值。如果您某些,则只需要按WHERE
子句而不是每组MAX()
过滤一行,请查看使用{{1}的其他答案}& ORDER BY
。
答案 1 :(得分:1)
尝试
SELECT r.id, r.state, r.revision
FROM VIEW_data r
WHERE r.id = 1
ORDER BY r.revision DESC
LIMIT 0,1