DISTINCT heißt nur eindeutige Zeilen.

Interaktives SQL optimiert für schnellere Anzeige der Daten. Beim Blättern wirds dann ggf. langsamer.

Embedded SQL optimiert eher für Wiederverwendbarkeit des Cursors.

Manchmal hilft ein "optimize for 1 record".

Wenn du das Programm ausführst, starte vorher mal STRDBG.
Im Joblog findest du dann diverse Meldungen, warum das so langsam ist.

Dass diese Form von SQL nicht gerade optimal ist, erklärt sich eigentlich von selbst.

"group by concat" führt häufig zu Tablescans, wenn nicht vorher eingeschränkt werden kann.
Prüfe, ob über SGGARN ein Index vorhanden ist, lege ihn ggf. an.

Berechnungen in der Where-Klausel verhindern ebenso die Benutzung eines Index. Ggf. muss man ein Zusatzfeld integrieren, dass das Datum dann eben in JJJJMMTT speichert, so dass man mittels Index und "between" abfragen kann.

Es gibt sicherlich noch mehr Optimierungen.