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