Użyj COALESCE
SELECT id,
GREATEST(date1,
COALESCE(date2, 0),
COALESCE(date3, 0)) as datemax
FROM mytable
Aktualizacja:ta odpowiedź poprzednio używała IFNULL
co działa, ale jak zauważył Mike Chamberlain w komentarzach, COALESCE
jest faktycznie preferowaną metodą.