Usa COALESCE
SELECT id,
GREATEST(date1,
COALESCE(date2, 0),
COALESCE(date3, 0)) as datemax
FROM mytable
Aggiornamento:questa risposta utilizzava in precedenza IFNULL
che funziona, ma come ha sottolineato Mike Chamberlain nei commenti, COALESCE
è in realtà il metodo preferito.