MySQL Max 函数混合行

标签 mysql sql database

似乎我在使用 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 BYLIMIT 的答案。

关于MySQL Max 函数混合行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16995786/

相关文章:

mysql - mysql中如何选择条件复杂的SQL

mysql - 如何更改现有 MySQL 数据库的排序规则?

php - 在MYSQL中,我想获得具有多个条件的多个SUM来进行总计并获得价格里程碑

sql - 迁移到云数据库

PHP:mysql_connect 函数的返回值是 bool 值还是凭证本身?

PHP: $row undefined variable

mysql - 为每个用户选择多条记录 - SQL

java - MySql Java 分离抛出的相同错误

mysql - 它表示什么时间?

mysql - SQL 插入表。有值=(插入前的值)+一个数字(例如1000)