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
)
Благодаря трябва да отидете на @Quassnoi . Вижте отговора му в подобен (но по-сложен) въпрос:mysql-group-by-to-display-latest-result
Ако актуализирате programs
таблица и задайте close_date
за всички записи е нула до close_date='9999-12-31'
, след това вашият ORDER BY
ще бъде по-просто (и цялата заявка по-бърза с подходящи индекси):
ORDER BY
pi.close_date DESC