如果我有一个表(在其他列中)有两个DATETIME列,我如何从这两列中选择最近的日期.
例:
ID Date1 Date2 1 1/1/2008 2/1/2008 2 2/1/2008 1/1/2008 3 1/10/2008 1/10/2008
如果我希望我的结果看起来像
ID MostRecentDate 1 2/1/2008 2 2/1/2008 3 1/10/2008
有一种简单的方法可以做到这一点,我显然是在忽视它吗?我知道我可以做子查询和case语句,甚至可以在sql server中编写一个函数来处理它,但我脑子里已经知道有一个已经内置的max-compare类型函数,我只是忘记了.
CASE是IMHO你最好的选择:
SELECT ID, CASE WHEN Date1 > Date2 THEN Date1 ELSE Date2 END AS MostRecentDate FROM Table
如果其中一列可以为空,则只需要将其括起来COALESCE
:
.. COALESCE(Date1, '1/1/1973') > COALESCE(Date2, '1/1/1973')
select ID, case when Date1 > Date2 then Date1 else Date2 end as MostRecentDate from MyTable
您可以将其抛入标量函数,这使得处理空值更容易一些.显然它不会比内联案例陈述更快.
ALTER FUNCTION [fnGetMaxDateTime] ( @dtDate1 DATETIME, @dtDate2 DATETIME ) RETURNS DATETIME AS BEGIN DECLARE @dtReturn DATETIME; -- If either are NULL, then return NULL as cannot be determined. IF (@dtDate1 IS NULL) OR (@dtDate2 IS NULL) SET @dtReturn = NULL; IF (@dtDate1 > @dtDate2) SET @dtReturn = @dtDate1; ELSE SET @dtReturn = @dtDate2; RETURN @dtReturn; END