Найти максимальную дату из нескольких полей в строке

MikleBess
Дата: 24.02.2010 17:26:50
Есть запрос с кучей дат. Типа: дата создания, дата подтверждения, дата одобрения, дата оплаты ... и суммы. Даты могут быть null.
Я пересчитываю суммы функцией в разные валюты.
Нужно в функцию передать максимальную дату not null.
С помощью case очень сложно - дат много.
Получается что-то вроде:
select
dat0
dat1,
dat2,
val2val (sum1,(сюда максимальную дату), tekval, 'EUR')
...

Поможите!
Паганель
Дата: 24.02.2010 17:31:10
select
dat0
dat1,
dat2,
val2val (sum1,(select max(d) 
                 from (select dat0 union all
                       select dat1 union all
                       select dat2
                       ) t(d)
               ), tekval, 'EUR')
iap
Дата: 24.02.2010 17:37:21
Паганель
select
dat0
dat1,
dat2,
val2val (sum1,(select max(d) 
                 from (select dat0 union all
                       select dat1 union all
                       select dat2
                       ) t(d)
               ), tekval, 'EUR')
А в аргументе функции так точно можно?
Версия сервера какая?

MikleBess, постарайтесь избавиться от функции в SELECTе. Очень полегчает, вот увидите!
Почему бы не сджойнить таблицу с таблицей курсов, например?
Паганель
Дата: 24.02.2010 17:48:38
нда
функцию-то я и проглдел
сбило отсутствие dbo
create function myfunction(@dt datetime) returns int as
begin
  return month(@dt)
end
go
with test_data as (
   select getdate() as d1, getdate() - 1 as d2
)
select dbo.myfunction(c.d) result
  from test_data
  cross apply (select max(d) d from (select d1 union all 
                                     select d2) t(d)
               ) c
go
drop function myfunction
go

result
-----------
2

(1 row(s) affected)
MikleBess
Дата: 24.02.2010 18:31:33
Версия 2005