SELECT c.*, p.*
FROM clients AS c
JOIN programs AS p
ON p.id =
(
SELECT pi.id
FROM programs AS pi
WHERE pi.client_id = c.id
ORDER BY
pi.close_date=0 DESC, pi.close_date DESC
LIMIT 1
)
Danke an @Quassnoi . Siehe seine Antwort in einer ähnlichen (aber komplizierteren) Frage:mysql-group-by-um-neuestes-ergebnis-anzuzeigen
Wenn Sie die programs
aktualisieren Tabelle und legen Sie close_date
fest für alle Datensätze, die bis close_date='9999-12-31'
Null sind , dann Ihr ORDER BY
wird einfacher (und die ganze Abfrage schneller mit richtigen Indizes):
ORDER BY
pi.close_date DESC