Es gibt mehrere Möglichkeiten, dies zu erreichen.
Die folgenden Beispiele gehen alle davon aus, dass Ihre Tabelle mit dem Namen ist table1
und dass Ihre Felder sind id
, class
, version
und fruit
(nicht fruit?
) - diese gegebenenfalls ändern, um Ihre Daten zu entsprechen.
Hinweis: In den folgenden Beispielen wird davon ausgegangen, dass Ihr fruit
Feld ein Textfeld ist. Wenn es sich bei Ihrem fruit
Feld tatsächlich um ein boolesches Feld (Ja / Nein) handelt, entfernen Sie 'No'
in den folgenden Beispielen die einfachen Anführungszeichen .
Verwenden einer verbundenen Unterabfrage:
select u.id, u.class from table1 u inner join ( select t.id, max(t.version) as mv from table1 t where t.fruit = 'No' group by t.id ) v on u.id = v.id and u.version = v.mv
Hier wählt die Unterabfrage jeweils die größte version
für id
Datensätze aus, wobei fruit = 'No'
diese mit dem vollständigen Datensatz verbunden wird, um die erforderlichen Felder für jedes id
und zurückzugeben version
.
Verwenden einer korrelierten Unterabfrage:
select t.id, t.class from table1 t where t.fruit = 'No' and not exists (select 1 from table1 u where u.id = t.id and u.fruit = 'No' and u.version > t.version)
Hier wird die Auswahl vollständig innerhalb der WHERE
Klausel durchgeführt, die für jeden Datensatz prüft, ob ein weiterer Datensatz im Satz mit demselben id
und einem größeren version
Datensatz vorhanden ist. Wenn ja, wird der Datensatz nicht zurückgegeben.
Verwenden eines LEFT JOIN
mit ungleichen Join-Kriterien:
select t.id, t.class from table1 t left join table1 u on t.id = u.id and t.version < u.version where t.fruit = 'No' and u.id is null
Dieses Beispiel kann nur in MS Access in der SQL-Ansicht dargestellt werden, da der MS Access-Abfrage-Designer keine Verknüpfungen anzeigen kann, die gleiche Verknüpfungskriterien haben (dh, wenn ein Feld einem anderen entspricht).
Dieses Beispiel ähnelt im Betrieb der korrelierten Unterabfrage, die Auswahl wird jedoch vom Join und nicht innerhalb der WHERE
Klausel ausgeführt.
Beachten Sie schließlich, dass das angegebene Beispielergebnis falsch ist: class
Das Maximum version
für for id = 'Onion'
sollte WEST
nicht sein SOUTH
.