我编写了一些代码以从多个列中提取最新日期。
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
答案 0 :(得分:1)
您可以将APPLY
与WHERE
子句一起使用:
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();