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 BYaggregate を含む句が必要ですMAX()。MySQL では、(他の RDBMS がエラーを報告する場合) これを省略することができますが、結果は不確定であり、表示されています。revこれは、グループ化されたperを返すサブクエリに結合することで処理できます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。グループごとではなく、句によってフィルタリングされた1行のみが必要であることが確実な場合は、 &を使用する他の回答を見てください。WHEREMAX()ORDER BYLIMIT

于 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 に答える