Hallo,
HAVING MAX(datum) ist ja so auch nicht wirklich vollständig. Das ist ungefähr genauso als wenn du schreibst WHERE datum.
Ausserdem ist deine Problemstellung nicht mit HAVING zu lösen sondern mit einer korrelierenden Unterabfrage
SELECT n1.id, n1.name, n1.datum, n1.nachricht
FROM nachrichten n1
WHERE datum =
(SELECT max(datum)
FROM nachrichten n2 where n2.name = n1.name)
oder mit einem Join
SELECT n1.id, n1.name, n1.datum, n1.nachricht
FROM nachrichten n1
INNER JOIN (Select name, max(datum) as maxdatum
FROM nachrichten
GROUP BY name) n2
on n1.name = n2.name
and n1.datum = n2.maxdatum
Gruss, Frank