Tsql 如何从两个字段中提取最新日期

Tsql 如何从两个字段中提取最新日期,tsql,sql-server-2012-express,Tsql,Sql Server 2012 Express,我有一个包含两个到期日期字段的表。有时两者都可以匹配,有时其中一个是空白的,有时一个比另一个大。我需要如何将最新的到期日从两个字段中拉入一个字段。字段是PBDUE和XDCURDT,它们在表中都是datetime。假设两列都是日期(date/datetime/etc),当您说空白时,您的意思是NULL: 内部查询计算每个列的最大(最近)值,外部查询返回最大值(或PBDUE,如果两者相等) 结果: ID MostCurrentDate -- --------------- 1 2013

我有一个包含两个到期日期字段的表。有时两者都可以匹配,有时其中一个是空白的,有时一个比另一个大。我需要如何将最新的到期日从两个字段中拉入一个字段。字段是PBDUE和XDCURDT,它们在表中都是datetime。

假设两列都是日期(date/datetime/etc),当您说空白时,您的意思是
NULL

内部查询计算每个列的最大(最近)值,外部查询返回最大值(或
PBDUE
,如果两者相等)

结果:

ID   MostCurrentDate
--   ---------------
1    2013-01-01
2    2011-01-01
3    2009-01-01
4    2008-01-01

MostCurrentDate
---------------
2013-01-01

您希望输出中有一个值,还是希望输出中每一行的最新日期?显示示例数据和所需结果(正如我在回答中所做的那样)在描述场景时比文字问题更有用。
DECLARE @x TABLE(ID INT,PBDUE DATE, XDCURDT DATE);

INSERT @x VALUES
(1,'2013-01-01','2012-01-01'), -- PBDUE greater
(2,'2010-01-01','2011-01-01'), -- XDCURDT greater
(3,NULL,'2009-01-01'), -- PBDUE "blank"
(4,'2008-01-01',NULL); -- XDCURDT "blank"

-- if you want one max date per row:

SELECT ID, MostCurrentDate = CASE
  WHEN PBDUE >= COALESCE(XDCURDT, '1900-01-01') THEN PBDUE
  WHEN XDCURDT >= COALESCE(PBDUE, '1900-01-01') THEN XDCURDT
  -- might want an ELSE if you don't want NULL
  -- when both values are NULL
  END
FROM @x
ORDER BY ID;

-- if you want one max date for the whole table:

SELECT MostCurrentDate = MAX(d) FROM (SELECT CASE
  WHEN PBDUE >= COALESCE(XDCURDT, '1900-01-01') THEN PBDUE
  WHEN XDCURDT >= COALESCE(PBDUE, '1900-01-01') THEN XDCURDT
  END
FROM @x) AS c(d);
ID   MostCurrentDate
--   ---------------
1    2013-01-01
2    2011-01-01
3    2009-01-01
4    2008-01-01

MostCurrentDate
---------------
2013-01-01