There are a few ways to do it, but as soon as you start doing funky things with group by you often need subqueries to make it do what you want.
SELECT action,
max(date)
FROM table
GROUP BY action
The first temptation is to just grab message, which mysql will let you do (though it shouldn't, for SQL compliance, you have to use an aggregate function on an item in the select list, or group by it.)
select action,
message,
max(date)
from table
group by action
This is not a valid query, and even if MySQL will run it, you'll likely be getting the wrong message, as it isn't guaranteed you'll get the one that goes with the same record as the one for that action (i.e. you could get the same message from one action for all the actions you get back.)
Now, we have a few issues to consider. Will we have repeating dates in this action? i.e. can we have two adds on 11-mar-2004? if so, which message do we want? Both, the last?