Anda memerlukan GROUP BY
klausa dengan agregat MAX()
. MySQL mengizinkan Anda untuk menghilangkannya (di mana RDBMS lain akan melaporkan kesalahan) tetapi dengan hasil yang tidak pasti, yang Anda lihat. Ini dapat ditangani dengan bergabung dengan subquery yang mengembalikan rev
. yang dikelompokkan 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
Di atas akan mengembalikan rev
maks nilai untuk id
. Jika Anda pasti Anda hanya perlu satu baris yang difilter oleh WHERE
klausa daripada MAX()
per grup, lihat jawaban lain yang menggunakan ORDER BY
&LIMIT
.