Je hebt een GROUP BY
. nodig clausule met het aggregaat MAX()
. MySQL staat je toe om het weg te laten (waar andere RDBMS fouten zouden rapporteren), maar met onbepaalde resultaten, die je ziet. Dit kan worden afgehandeld door deel te nemen aan een subquery die de gegroepeerde rev
. retourneert 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
Het bovenstaande retourneert de max rev
waarde voor elke id
. Als je zeker bent je hebt alleen die ene rij nodig zoals gefilterd door de WHERE
clausule in plaats van de MAX()
kijk per groep naar het andere antwoord dat gebruik maakt van ORDER BY
&LIMIT
.