Gebruik COALESCE
SELECT id,
GREATEST(date1,
COALESCE(date2, 0),
COALESCE(date3, 0)) as datemax
FROM mytable
Update:dit antwoord gebruikte eerder IFNULL wat wel werkt, maar zoals Mike Chamberlain opmerkte in de opmerkingen, COALESCE is eigenlijk de voorkeursmethode.