In einer Abfrage letzten Datensatz anzeigen

Jobbi

Benutzer
Beiträge
5
Hallo Leute,
bitte helft mir SQL-Laien weiter. Diverse Internetforen bieten zwar Lösungsschnipsel an, ich kriege daraus aber kein Bild für meine Lösung zusammen. Das Problem (als vereinfachtes Beispiel wie folgt):

Ich habe mit MS-Access 2010 zwei Tabellen tb_AG (Artikelgruppen) und tb_Art (Artikel), die über das AutoWert-Feld ID_AG in tb_AG in einer 1:n-Beziehung stehen.
Zu jeder Artikelgruppe gibt also n Datensätze in tb_Art.
Die Abfrage soll zu jeder Artikelgruppe nur den jeweils letzten DS (hier gemeint: den höchsten AutoWert) anzeigen.
Mein Lösungsversuch bestand darin, die jeweils einzelnen SQL-Abfragen zu verschachteln (Max-Wert ab FROM):

SELECT
tb_Art.ID_AG,
ID_Art
FROM
(SELECT ID_AG, ID_Art
FROM tb_Art
WHERE (((tb_Art.ID_Art)=(SELECT Max(ID_Art) FROM tb_Art)))
INNER JOIN
tb_AG
ON
tb_AG.ID_AG = tb_Art.ID_AG;

Ist aber falsch, das ist mir klar. Mehr aber leider auch nicht.


Ich würde mich sehr über einen Lösungsvorschlag freuen!
Jobbi
 
Werbung:
Wie wäre es mit
Code:
SELECT
t.ID_AG,
t.ID_Art,
tb_AG.*
FROM
(SELECT ID_AG, max(ID_Art) AS ID_Art
FROM tb_Art
GROUP BY ID_AG) t
INNER JOIN
tb_AG
ON
tb_AG.ID_AG = t.ID_AG;
Wobei der INNER JOIN mit tb_AG nur Sinn macht wenn man auch Spalten aus tb_AG braucht.
 
Hallo Ukulele,

ja! Group By ist der Schlüssel zur Lösung. Vielen Dank, Dein Code funktioniert wie ich es wollte.
Viele Grüße
Jobbi
 
Werbung:
Stimmt.
Meine spontane Antwort an Ukulele war auch nur so gemeint, dass ich auf die Group-By-Anweisung selber nie gekommen wäre. Wie gesagt, meine SQL-Kenntnisse sind sehr begrenzt.
 
Zurück
Oben