我有一个包含两个截止日期字段的表。有时它们都可以匹配,有时其中一个是空白的,有时其中一个大于另一个。我需要如何将最新的截止日期从两个字段中提取到一个字段中。这些字段是 PBDUE 和 XDCURDT,它们都是表中的日期时间。
问问题
60 次
2 回答
1
假设两列都是日期(日期/日期时间/等),你的意思是NULL
当你说空白时:
SELECT CASE WHEN PBDUE >= XDCURDT THEN PBDUE ELSE XDCURDT END DUEDT
FROM (
SELECT MAX(PBDUE) PBDUE, MAX(XDCURDT) XDCURDT FROM someTable
) t
内部查询计算每列的最大(最新)值,外部查询返回最大值(或者PBDUE
如果两者相等)。
于 2013-08-16T18:03:35.493 回答
0
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
于 2013-08-16T18:05:44.530 回答