MS Access/SQL - Nur die Einträge anzeigen, die das letzte Datum haben anhand ihrer ID.
Hallo, hoffe jemand kann mir bei dem SQL Statement helfen...Ich habe eine Tabelle mit einer reportid und einem reportdate - eine reportid kann somit mehrere versionen mit unterschiedlichem Datum haben. Nun hätte ich gerne als Abfrage, dass Access mir nur die reports der jeweiligen ID anzeigt, die zuletzt in die Tabelle eingegeben wurden (also nur die jeweiligen neuesten Reports mit höchstem Datum).
Also z.B. haben wir diese Tabelle: report1 mit reportdate 01.01.2013 report1 mit reportdate 02.02.2013 report1 mit reportdate 03.03.2014 report 2 mit reportdate 04.04.2014
In der Abfrage sollte es nun nur die 2 folgende Anzeigen: report1, 03.03.2014 report 2, 04.04.2014
Danke für jegliche Hilfe,
LG
2 Antworten
Das geht am besten mit einem Subselect:
SELECT * FROM tabelle WHERE datum = (SELECT MAX(datum) FROM tabelle)
Statt *** kannst auch einzelne Spalten aus Deiner Tabelle angeben, Sowohl den Select als auch den Subselect (das ist der in Klammern) kannst mittels WHERE mit Bedingungen versehen.
Arbeitsweise:
Der Subselect ermittelt das letzte Datum der Tabelle oder wenn eine Bedingung angegeben wird, das letzte Datum der eingeschränkten Menge. Der Hauptselect wählt nun die Sätze aus, die dieses Datum haben. Wenn Bedingungen angegeben werden, muss darauf geachtet werden, dass die Mengen sich entsprechen, also nicht das Datum von irgendeiner Menge verwendet wird, die für die eigentliche Auswahl nicht relevant ist. Die Abfrage funktioniert nämlich auch mit einem falschen Datum.
select reportid, max(reportdate) from ... group by reportdate order by reportid
vorausgesetzt, reportdate ist vom type DATE.
gruß, max.
Das funtioniert zwar, allerdings wenn ich andere Spalten zusätzlich anzeigen will zeigt es mir wieder alle Zeilen und nicht nur die gewollten. Wie kann ich das umgehen?
Danke, und wie würde ich das im Parameterfeld unter Kriterien eingeben bei dem Query? Habe hier nun [reportid], [reportdate] - leider nimmt es kein SQL Statement an, deswegen habe ich es über die Summe mal probiert: Bei reportdate habe ich auf Max gestellt, nun zeigt es mir aber alle an (also auch reportid mehrfach mit dem jeweiligen Datum, obwohl ich nur das letzte Datum einer einzelnen reportid sehen will). Gibt es hier eine einfachere Lösung das richtig darstellen zu lassen?