Tach!
Zeilenumbrüche wären sehr zuvorkommend gewesen, weil man dann die Query besser erfassen und sich das Querscrollen größtenteils sparen kann.
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)
Die Subquery ermittelt die jeweils neuesten Login-Datümer aller User. Und diese mixt du dann mit denen der einzelnen User. Wenn du die Query nie verändert hast, war sie schon immer seltsam/falsch.
Vielleicht willst du eine Subquery, die sich auf den Nutzer der Hauptquery bezieht, also eine Correlated Subquery.
Ein
select MAX(logindate) from vpnprotokoll where username = 'problemkind' group by username
zeigt korrekt den letzten Eintrag (von heute) des Benutzers an.
Ein GroupBy ist in dem Fall aber sinnlos, weil die Datenmenge ja sowieso schon auf nur einen Nutzer begrenzt ist.
dedlfix.