【问题标题】:Retrieving max date from multiple columns, for dates before today从多个列中检索最大日期,对于今天之前的日期
【发布时间】:2019-03-27 22:42:57
【问题描述】:

我编写了一些代码来从多个列中提取最新日期。

select (select max(LatestDate)
        from (values (col1),(col2),(col3)) as updatedate(LatestDate)
        ) as LatestDate

from table1

但是,我只想记录在今天之前的日期。当我为下面的示例日期运行代码时,它给我的最新日期为 10/04/2019,即今天之后。

我希望它提取的日期是今天之前的 14/03/2019 (col2),并且是日期在今天之前的所有列的最新日期。

Today = 27/03/2019
col1 = 02/02/2019
col2 = 14/03/2019
col3 = 10/04/2019

任何人都可以就此提出建议吗?希望有道理。

非常感谢

afk

【问题讨论】:

  • 提示:添加WHERE 子句

标签: sql sql-server tsql


【解决方案1】:

您可以将APPLYWHERE 子句一起使用:

select t.*, tt.LatestDate
from table1 t outer apply
     ( select max(LatestDate) as LatestDate
       from ( values (col1),(col2),(col3) ) as updatedate(LatestDate)
       where LatestDate < convert(date, GETDATE())
     ) tt;

【讨论】:

    【解决方案2】:

    您可以使用下面的代码来实现相同的目的。

    select (select max(LatestDate)
            from (values (col1),(col2),(col3)) as updatedate(LatestDate)
            where updatedate < CAST(GETDATE() AS DATE) 
            ) as LatestDate
    
    from table1
    

    【讨论】:

      【解决方案3】:

      试试这个 - 你可以取小于或等于今天的 MAX 日期:

      with cte as 
      (
        select * 
        from (values (col1),(col2),(col3)) as updatedate
      )
      select (
               select max(updatedate)
               from cte
               where updatedate <= GETDATE()
              ) as LatestDate
      from table1
      

      【讨论】:

        【解决方案4】:

        添加where 子句。我会使用cross apply 来表达查询:

        select max(LatestDate)
        from table1 t1 cross apply
             (values (t1.col1), (t1.col2), (t1.col3)
             ) updatedate(LatestDate)
        where updateddate.LatestDate < getdate();
        

        【讨论】:

        • 确定吗? FROM .... FROM?你会在关键字'from'附近得到不正确的语法T1来自哪里?
        • @Sami 。 . .错字已修复。
        • 不,仍然是 t1 别名。然后你还会得到无法绑定多部分标识符“updateddate.LatestDate”。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-03-09
        • 1970-01-01
        • 1970-01-01
        • 2013-07-08
        • 2016-03-06
        • 2019-09-03
        • 1970-01-01
        相关资源
        最近更新 更多