If you want to make your life easier, put a alias for group fields (just like you did for your topics table). Azza's maxdate is just that:
select a.topic_id, a.topic_header,
max(messsages.message_date) as maxdate
from topics a
left outer join messages(a.topic_id=messages.topic_id)
group by...