1

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

2 回答 2

1

您需要一个GROUP BY带有聚合的子句MAX()。MySQL 允许您省略它(其他 RDBMS 会报告错误),但您看到的结果不确定。这可以通过加入一个返回分组revper的子查询来处理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()每组过滤的一行,请查看使用ORDER BY&的另一个答案LIMIT

于 2013-06-08T03:43:01.157 回答
1

尝试

SELECT r.id, r.state, r.revision
FROM VIEW_data r
WHERE r.id = 1
ORDER BY r.revision DESC
LIMIT 0,1
于 2013-06-08T03:43:27.293 回答