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
)
Thanx phải truy cập @Quassnoi . Xem câu trả lời của anh ấy trong một câu hỏi tương tự (nhưng phức tạp hơn): mysql-group-by-to-display-new-result
Nếu bạn cập nhật programs
bảng và đặt close_date
cho tất cả các bản ghi có giá trị bằng 0 đến close_date='9999-12-31'
, sau đó là ORDER BY
của bạn sẽ đơn giản hơn (và toàn bộ truy vấn nhanh hơn với các chỉ mục thích hợp):
ORDER BY
pi.close_date DESC