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
)
Terima kasih harus pergi ke @Quassnoi . Lihat jawabannya dalam pertanyaan serupa (tetapi lebih rumit):mysql-group-by-to-display-latest-result
Jika Anda memperbarui programs
tabel dan atur close_date
untuk semua catatan yang nilainya nol hingga close_date='9999-12-31'
, lalu ORDER BY
akan lebih sederhana (dan seluruh kueri lebih cepat dengan indeks yang tepat):
ORDER BY
pi.close_date DESC