Если бы для каждой строки мне нужна была последняя дата в двух столбцах даты, я бы использовал оператор case:
select case when dt1 > d2 then dt1 else dt2 end as latest from table;
Если бы я хотел имя столбца (и я не знаю, зачем я это хотел):
select case when dt1 > d2 then 'dt1' else 'dt2' end as latest from table;
Если бы я хотел иметь дело с большим количеством столбцов, я бы вложил больше операторов case:
select case when dt1 > d2 then
(case when dt1 > dt3 then dt1 else dt3 end )
else
(case when dt2 > dt3 then dt2 else dt3 end )
end as latest
from table;
Или, лучше, я мог бы сделать это так:
select case
when dt1 > d2 and dt1 > dt3 then dt1
when dt2 > d1 and dt2 > dt3 then dt2
else dt3 end as latest
from table ;
Или (может быть, лучше), я мог бы написать функцию. Так как max - встроенная функция, я бы написал что-то под названием maxOf. Это в синтаксисе функции MySQL, ваша БД может использовать другой синтаксис и может использовать переменные OUT вместо возврата значения:
create function maxOf( date lhs, date rhs )
RETURNS date
LANGUAGE SQL
DETERMINISTIC
CONTAINS SQL
COMMENT 'return the later of two dates'
return case when lhs > rhs then lhs else rhs end;
select maxOf( dt1, maxOf( dt2, dt3) as latest from table;