Klaus1: Denkfehler bei SQL-Abfrage?

Beitrag lesen

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