Hallo,
ich möchte mit einer SQL-Abfrage alle Protokolleinträge älter als x Tage finden. Es wird hier jede Anmeldung eines Benutzers protokolliert.
Die Protokolltabelle hat folgende Felder:
idnr (int autoincrement)
username (varchar)
logindate (varchar)
logoutdate (varchar)
dauer (varchar)
status (char) A=aktiv
Das das sinnvollerweise Datumsfelder sein sollten und nicht Varchar ist mir bewusst, aber jetzt im System nicht mehr so leicht zu ändern.
Meine SQL-Abfrage sieht so aus:
select *
from vpnprotokoll
where logindate <> '' AND logindate < '2021-04-01'
AND status = 'A'
AND logindate IN (select MAX(logindate)
from vpnprotokoll group by username)
order by username
Irgendwo scheint da ein Denkfehler zu sein, denn die Abfrage liefert (neuerdings) auch jemanden, der sich täglich anmeldet und auch aktuelle Einträge in der Tabelle stehen hat (z.B. von heute)
Ein
select MAX(logindate)
from vpnprotokoll
where username = 'problemkind' group by username`
zeigt korrekt den letzten Eintrag (von heute) des Benutzers an.
Kann mir jemand auf die Sprünge helfen?
LG Klaus
Edit Rolf B: Umbrüche in SQLs eingefügt, Column-Liste in ~~~ eingeschlossen