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
)
Tack ska gå till @Quassnoi . Se hans svar i en liknande (men mer komplicerad) fråga:mysql-group-by-to-display-latest-result
Om du uppdaterar programs
tabell och ställ in close_date
för alla poster att det är noll till close_date='9999-12-31'
, sedan din ORDER BY
blir enklare (och hela frågan snabbare med korrekta index):
ORDER BY
pi.close_date DESC