MySQL Max函数混合行

时间:2013-06-08 03:39:58

标签: mysql sql database

似乎我在使用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

2 个答案:

答案 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