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
)
Ga dan naar @Quassnoi . Zie zijn antwoord in een vergelijkbare (maar ingewikkelder) vraag:mysql-groep-op-om-laatste-resultaat weer te geven
Als u de programs
bijwerkt tabel en stel close_date
in voor alle records is het nul tot close_date='9999-12-31'
, dan uw ORDER BY
zal eenvoudiger zijn (en de hele zoekopdracht sneller met de juiste indexen):
ORDER BY
pi.close_date DESC