I have two tables that look like this:
Table: cases
id
name
status
case_no
Table: notes
id
case_id
note_date
notes
I have been having same problem recently and this forum has helped me a lot but I found the OMG Ponies answer isn't complete. It works for those cases with notes but it doesn't for cases without notes which is my issue. My answer is similar but instead joining the group query with notes, I join it with cases.
It would be:
SELECT c.*, x.*
FROM CASES c
LEFT JOIN (SELECT n.case_id, MAX(n.note_date) AS max_note_date
FROM NOTES n
GROUP BY n.case_id) y ON y.case_id = c.case_id
LEFT JOIN NOTES x ON x.case_id = c.case_id AND x.note_date=y.max_note_date
It's also valid to get just cases with notes removing one left keyword or both