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
)
Gracias debería ir a @Quassnoi . Vea su respuesta en una pregunta similar (pero más complicada):mysql-group-by-to-display-lastest-result
Si actualiza los programs
tabla y establecer close_date
para todos los registros que es cero a close_date='9999-12-31'
, luego su ORDER BY
será más simple (y toda la consulta más rápida con los índices adecuados):
ORDER BY
pi.close_date DESC