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
)
Obrigado deve ir para @Quassnoi . Veja a resposta dele em uma pergunta semelhante (mas mais complicada):mysql-group-by-to-display-latest-result
Se você atualizar os
programs
table e defina close_date
para todos os registros que é zero a close_date='9999-12-31'
, então seu ORDER BY
será mais simples (e toda a consulta mais rápida com índices adequados): ORDER BY
pi.close_date DESC