【问题标题】:Get the Latest date from the Three columns [duplicate]从三列中获取最新日期[重复]
【发布时间】:2014-07-14 21:01:25
【问题描述】:
ID     Date1           Date2            Date3   
158    5/3/13 15:11    2/20/13 11:38    2/20/13 11:38

我想从这三列中获取最新日期。

【问题讨论】:

  • 使用 case 语句。

标签: sql sql-server sql-server-2008 tsql


【解决方案1】:
SELECT CASE WHEN Date1 IS NOT NULL 
             AND Date1>=COALESCE(Date2,CAST('0001-01-01 00:00' AS DATETIME2)) 
             AND Date1>=COALESCE(Date3,CAST('0001-01-01 00:00' AS DATETIME2)) THEN Date1 
            WHEN Date2 IS NOT NULL 
             AND Date2>=COALESCE(Date1,CAST('0001-01-01 00:00' AS DATETIME2))
             AND Date2>=COALESCE(Date3,CAST('0001-01-01 00:00' AS DATETIME2)) THEN Date2 
            WHEN Date3 IS NOT NULL 
             AND Date3>=COALESCE(Date1,CAST('0001-01-01 00:00' AS DATETIME2))
             AND Date3>=COALESCE(Date2,CAST('0001-01-01 00:00' AS DATETIME2)) THEN Date3 
       END AS latest
FROM t1

Example

【讨论】:

  • 假设其中没有数据空值。我必须采取最新的其他两列。
  • @Notulysses 如果三个日期都相同会怎样。
  • @Aniket : 那么第一个 WHEN 会成功并返回 Date1 (=Date2=Date3)
  • 它不起作用..它只显示最新的空值。
  • 非常感谢您的回答
【解决方案2】:

尝试使用CASE

SELECT ID,
       CASE WHEN Date1>=Date2 AND  Date1>=Date3 THEN Date1
            WHEN Date2>=Date1 AND  Date2>=Date3 THEN Date2
            WHEN Date3>=Date1 AND  Date3>=Date2 THEN Date3
      END AS GreatestDate
FROM TableName

【讨论】:

  • 你确定这行得通,Date1 什么时候返回?
  • @CSL:糟糕!错字已修复。谢谢。
【解决方案3】:
SELECT CASE WHEN date1 > date2 AND date1 > date3 THEN date1
            WHEN date2 > date3 THEN date2
            ELSE date3 END MaxDate
FROM TableName

【讨论】:

    【解决方案4】:

    请尝试使用 UNPIVOT

    SELECT MAX(MaxDt) MaxDt
       FROM tbl 
    UNPIVOT
       (MaxDt FOR E IN 
          (Date1, Date2, Date3)
    )AS unpvt;
    

    【讨论】:

      【解决方案5】:

      这可能对你有帮助

       select case when Date1 > Date 2 then case when Date1 > Date3 then Date1 end
              when Date2 > Date3 then Date2   
             else  Date3 from <yortable>
      

      【讨论】:

        【解决方案6】:

        试试这个...:)

        select top 1 a.date from
        (
        select Date1 as date from table_name where Id='158'
        union
        select Date2 as date from table_name where Id='158'
        union
        select Date3 as date from table_name where Id='158'
        )a
        order by a.date DESC;  
        

        【讨论】:

          【解决方案7】:
          SELECT
          CASE
              WHEN Date1 >= Date2 AND Date1 >= Date3 THEN Date1
              WHEN Date2 >= Date1 AND Date2 >= Date3 THEN Date2
              WHEN Date3 >= Date1 AND Date3 >= Date2 THEN Date3
              ELSE Date1
          END AS MostRecentDate
          

          SELECT  MAX(date_columns) AS max_date
                 FROM    
                 ( 
                    (SELECT date1 AS date_columns FROM tablename)
                    UNION
                    (SELECT date2 AS date_columns FROM tablename)
                    UNION
                    (SELECT date3 AS date_columns FROM tablename)
                 ) AS date_query
          

          【讨论】:

            猜你喜欢
            • 2020-02-05
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2021-04-16
            • 1970-01-01
            • 1970-01-01
            • 2015-11-03
            • 2013-09-04
            相关资源
            最近更新 更多