Datensatz mit Maximum

Status
Dieses Thema wurde gelöst! Zur Lösung gehen…

Rene42

Erfahrenes Mitglied
Guten Morgen,

ich habe in Access eine Tabelle mit der Strutkur ID CHAR, Benutzer CHAR und Aktion DATE.

Nun will ich eine Abfrage konstruieren die mir sagt wann welcher Benutzer zuletzt etwas gemacht hat. Dazu mache ich folgendes:
SQL:
SELECT Benutzer, Max(ID) AS Zuletzt FROM Aktionen GROUP BY Benutzer;

Irgendwie wird mir nun nicht klar wie ich die ID da noch rein bekomme. Frage ich die ab, sagt der Interpreter das das nicht geht weil ID nicht teil der Aggregatfunktion ist.

Gruß René
 

Sempervivum

Erfahrenes Mitglied
Mir ist nicht ganz klar, ob Du das für einen bestimmten Benutzer auslesen willst oder für alle.

Für einen bestimmten:
Code:
SELECT Benutzer, MAX(Aktion) AS Zuletzt FROM benutzer WHERE ID='die-benutzer-id'

Für alle:
Code:
SELECT Benutzer, MAX(Aktion) AS Zuletzt FROM benutzer GROUP BY ID
 

Rene42

Erfahrenes Mitglied
Hallo,

evtl. habe ich mich nicht so klar ausgedrückt. Ich habe die folgende Tabelle (Aktionen):

1647973803110.png

Ich möchte nun eine Liste der Letzten Aktionen je Benutzer haben, also in diesem Fall den Datensatz 2 und 4.

Das versuchte ich mit:

SQL:
SELECT ID, Max(Änderungsdatum) AS Zuletzt, Aktion, Benutzer FROM Aktionen GROUP BY Benutzer;

Nur will er mir ID und Aktion nicht anzeigen, da die nicht Teil der Aggregatfunktion sind.
 

Zvoni

Erfahrenes Mitglied
Getestet in SQLite. Keine Ahnung ob Access alles unterstützt
SQL:
SELECT
T2.ID, T1.Datum, T2.Aktion, T1.Benutzer
FROM (SELECT Benutzer, MAX(Änderungsdatum) As Datum FROM Aktionen GROUP BY Benutzer) AS T1
INNER JOIN Aktionen AS T2
ON
T2.Benutzer=T1.Benutzer AND
T2.Änderungsdatum=T1.Datum
NotaBene: Das knallt natürlich, sofern ein User am "maximalsten" Tag zwei Einträge hat.....
 

Rene42

Erfahrenes Mitglied
Hallo,

erstmal vielen Dank für die Hilfe. Das hat mir für die Auswahl schonmal mein gewünschtes Ergebnis geliefert.

Nun habe ich versucht mir den Code in eine UPDATE Abfrage einzubauen. Dabei stoße ich auf folgende Fehlermeldung:

1648321228658.png

Der SQL Code lautet:

SQL:
UPDATE Vereinsmitglied SET Mitgliedschaft=Master.MG_TEXT FROM
(SELECT MaxDaten.VM, MaxDaten.Zuletzt, Referenz.Mitgliedstext AS MG_Text
FROM (SELECT Vereinsmitglied_Code AS VM, Max(Änderungsdatum) AS Zuletzt FROM Mitgliedszeile GROUP BY Vereinsmitglied_Code) AS MaxDaten
INNER JOIN Mitgliedszeile AS Referenz
ON MaxDaten.VM=Referenz.Vereinsmitglied_Code
AND MaxDaten.Zuletzt=Referenz.Änderungsdatum) AS Master
WHERE Vereinsmitglied.ID=Master.VM

Es erschließt sich mit nicht welcher Operator dort fehlen soll. Vielleicht hat hier einer eine Idee?

Gruß René
 

Zvoni

Erfahrenes Mitglied
Sieht so aus als ob Access keine UPDATES aus Aggregat-SELECT unterstützt
Ausserdem ist die Reihenfolge falsch
Use SELECT inside an UPDATE query

das einfachste ist wohl das Select in eine Tabelle zu feuern (SELECT INTO tmpMaster). Dann würde das Update so aussehen:
SQL:
UPDATE Vereinsmitglied INNER JOIN tmpMaster
ON Vereinsmitglied.ID=tmpMaster.VM
SET Mitgliedschaft=tmpMaster.MG_TEXT
und am Ende tmpMaster wieder droppen
 
Zuletzt bearbeitet:
Status
Dieses Thema wurde gelöst! Zur Lösung gehen…