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
でフィルタリングされた1行のみが必要です MAX()
ではなく句 グループごとに、ORDER BY
を使用する他の回答を見てください &LIMIT
。