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
)
Podziękowania należy udać się na adres @Quassnoi . Zobacz jego odpowiedź w podobnym (ale bardziej skomplikowanym) pytaniu:mysql-group-by-to-display-ostatni-wynik
Jeśli zaktualizujesz programs
tabeli i ustaw close_date
dla wszystkich rekordów, które mają wartość zero, do close_date='9999-12-31'
, a następnie ORDER BY
będzie prostsze (a całe zapytanie szybciej z odpowiednimi indeksami):
ORDER BY
pi.close_date DESC