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
)
Tak skal gå til @Quassnoi . Se hans svar i et lignende (men mere kompliceret) spørgsmål:mysql-group-by-to-display-latest-result
Hvis du opdaterer programs
tabel og indstil close_date
for alle registreringer, at den er nul til close_date='9999-12-31'
, derefter din ORDER BY
vil være enklere (og hele forespørgslen hurtigere med korrekte indekser):
ORDER BY
pi.close_date DESC