Hallo Linuchs,
autsch. Jetzt weiß ich, warum Du die Query erstmal nur gekürzt präsentiert hattest 😂
Aber egal. Auch mit dieser Query sollte ein GROUP BY funktionieren. Um sicher zu gehen, dass ansonsten alles ok ist, ändere den GROUP BY einmal vorübergehend in einen ORDER BY ort1.land_kz, trm1.tag. Dann siehst Du ja, was er Dir für D als erstes ausweist. Wenn Du andere Termine im System hast, die vorher erscheinen müssten, dann prüfe, ob die von einer anderen WHERE Bedingung entfernt werden.
Meinen Vorschlag von 11:49 kannst Du aber trotzdem anwenden. Meine dort aus dem Ärmel geschüttelte hypothetische Query war ja fast richtig. Nachdem du bitte erstmal die grundsätzliche Richtigkeit deiner Query überprüft hast, ergänze sie wie folgt:
...
FROM (bia_termine trm1
,bia_orte ort1 )
LEFT JOIN bia_adressen adr1
...
ersetze durch
...
FROM bia_termine trm1
JOIN bia_orte ort1
ON ort1.id = trm1.ort_id
JOIN (SELECT ort2.land_kz, MIN(trm2.tag) AS min_tag
FROM bia_termine trm2 JOIN bia_orte ort2 ON ort2.id = trm2.ort_id
GROUP BY ort2.land_kz) key
ON key.land_kz = ort1.land_kz AND key.min_tag = trm1.tag
LEFT JOIN bia_adressen adr1
...
AND ort1.id = trm1.ort_id <<<-- Zeile entfällt
...
Der JOIN mit dem key Alias sorgt dafür, dass Du pro Land 1-N Zeilen zum frühesten Termin bekommst. Deswegen muss der äußere GROUP BY stehen bleiben, damit Du nur einen Termin pro Tag bekommst.
Rolf
sumpsi - posui - clusi