Получение максимальной даты из нескольких столбцов, для дат до сегодняшнего дня - PullRequest
0 голосов
/ 27 марта 2019

Я написал код для извлечения последней даты из нескольких столбцов.

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

Кто-нибудь может посоветовать это? Надеюсь, это имеет смысл.

Большое спасибо

афк

Ответы [ 4 ]

1 голос
/ 27 марта 2019

Вы можете использовать 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;
0 голосов
/ 27 марта 2019

Добавить предложение where.Я бы сформулировал запрос, используя cross apply:

select max(LatestDate)
from table1 t1 cross apply
     (values (t1.col1), (t1.col2), (t1.col3)
     ) updatedate(LatestDate)
where updateddate.LatestDate < getdate();
0 голосов
/ 27 марта 2019

Вы можете использовать приведенный ниже код для достижения того же.

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

from table1
0 голосов
/ 27 марта 2019

Попробуйте - вы можете взять МАКСИМАЛЬНУЮ дату, которая меньше или равна сегодняшней:

with cte as 
(
  select * 
  from (values (col1),(col2),(col3)) as updatedate
)
select (
         select max(updatedate)
         from cte
         where updatedate <= GETDATE()
        ) as LatestDate
from table1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...