【问题标题】:How to pull most current date from two fields如何从两个字段中提取最新日期
【发布时间】:2013-08-16 17:41:30
【问题描述】:

我有一个包含两个截止日期字段的表。有时它们都可以匹配,有时其中一个是空白的,有时其中一个大于另一个。我需要如何将最新的截止日期从两个字段中提取到一个字段中。字段是 PBDUE 和 XDCURDT,它们都是表中的日期时间。

【问题讨论】:

  • 您想要输出中的单个值,还是想要输出中每一行的最新日期?显示示例数据和期望的结果(正如我在回答中所做的那样)在描述场景方面比文字问题更有用。
  • 抱歉,我只需要输出中的一个值。

标签: tsql sql-server-2012-express


【解决方案1】:

假设两列都是日期(日期/日期时间/等),当您说 blank 时,您的意思是 NULL

SELECT CASE WHEN PBDUE >= XDCURDT THEN PBDUE ELSE XDCURDT END DUEDT
FROM (
    SELECT MAX(PBDUE) PBDUE, MAX(XDCURDT) XDCURDT FROM someTable
) t

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

【讨论】:

    【解决方案2】:
    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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-09-03
      • 2014-07-27
      • 2021-01-05
      • 2022-01-25
      • 2022-01-25
      • 2021-01-28
      • 2016-08-20
      • 1970-01-01
      相关资源
      最近更新 更多