Sie benötigen ein GROUP BY
-Klausel mit dem Aggregat MAX()
. MySQL erlaubt es Ihnen, es wegzulassen (wo andere RDBMS Fehler melden würden), aber mit unbestimmten Ergebnissen, die Sie sehen. Dies kann durch Verbinden mit einer Unterabfrage gehandhabt werden, die den gruppierten rev
zurückgibt pro 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
Das obige gibt die maximale rev
zurück Wert für jede id
. Wenn Sie sicher sind Sie brauchen nur die eine Zeile, die durch WHERE
gefiltert wird -Klausel anstelle von MAX()
Sehen Sie sich pro Gruppe die andere Antwort an, die ORDER BY
verwendet &LIMIT
.