从今天开始之前的多个日期中检索最大日期

时间:2019-03-27 12:33:39

标签: sql sql-server tsql

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

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

4 个答案:

答案 0 :(得分: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;

答案 1 :(得分:0)

尝试此操作-您可以选择小于或等于今天的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

答案 2 :(得分:0)

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

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

from table1

答案 3 :(得分:0)

添加一个where子句。我会用cross apply来表示查询:

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