Выберите большее из двух (рассчитанных) значений даты - PullRequest
0 голосов
/ 28 ноября 2018

У меня есть два столбца даты Date A и Date B.

Мне нужно выбрать большее (самое последнее) из Date A + 42 Days и Date B.

Что такоелучший способ подойти к этому?

Ответы [ 4 ]

0 голосов
/ 28 ноября 2018

Я не уверен, что ваш вопрос был хорошо понят другими, поэтому позвольте мне предложить вам следующее решение:

SELECT
    IIF(DATEADD(DAY,42,t0.A) > t0.B, DATEADD(DAY,42,t0.A), t0.B) AS MaxDate
FROM
    YourTable  AS t0

ПРЕДУПРЕЖДЕНИЕ. Если у вас есть возможность значения NULL для ваших дат, у вас естьобрабатывать дела в вашем IIF

0 голосов
/ 28 ноября 2018

Я бы попробовал, надеюсь, это поможет!

SELECT 
MAX([a])

FROM    
(SELECT DATEADD(DD,42,SoCreateDate) [a]
FROM UNIQUESOID
UNION ALL
SELECT SOSUBMISSIONDATE
FROM UNIQUESOID 

) [x]

Просто чтобы объяснить, что делает этот скрипт;Создайте объединенный набор данных (используя объединение), чтобы две даты были в одном столбце, а затем мы используем SELECT (MAX), чтобы выбрать максимальное значение из только что созданного набора данных.

0 голосов
/ 28 ноября 2018

Вы можете использовать простой оператор CASE:

SELECT A, B, CASE WHEN DATEADD(DAY, 42, A) > B THEN DATEADD(DAY, 42, A) ELSE B END AS A42ORB

Существуют и другие способы, в зависимости от версии SQL Server, например:

SELECT A, B, CA.C
FROM t
CROSS APPLY (
    SELECT MAX(V) AS C
    FROM (VALUES
        (DATEADD(DAY, 42, A)),
        (B)
    ) AS VA(V)
) AS CA

Или:

SELECT A, B, CASE WHEN C > B THEN C ELSE B END
FROM t
CROSS APPLY (SELECT DATEADD(DAY, 42, A)) AS CA(C)
0 голосов
/ 28 ноября 2018

Для самой последней даты используйте MAX(), чтобы найти A + 42 дня, используйте DATEADD().Если вы можете дать нам структуру таблицы и ожидаемый результат, мы можем помочь вам лучше.Вот пример:

SELECT  MAX([YourDateColumn]) 
FROM    YourTable 
WHERE   [YourDateColumn] BETWEEN B AND DATEADD(DAY,42,A)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...