Denkfehler bei SQL-Abfrage?
bearbeitet von Rolf BHallo,
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:
~~~ SQL
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
~~~ SQL
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