Выбор самой последней даты между двумя столбцами - PullRequest
22 голосов
/ 05 января 2009

Если у меня есть таблица, в которой (среди других столбцов) есть два столбца DATETIME, как мне выбрать самую последнюю дату из этих двух столбцов.

Пример:

ID     Date1     Date2

1      1/1/2008   2/1/2008

2      2/1/2008   1/1/2008

3      1/10/2008  1/10/2008

Если бы я хотел, чтобы мои результаты выглядели как

ID     MostRecentDate

1      2/1/2008

2      2/1/2008

3      1/10/2008

Есть ли простой способ сделать это, что я, очевидно, упускаю из виду? Я знаю, что могу выполнять подзапросы и операторы case или даже писать функцию на сервере sql, чтобы справиться с этим, но у меня было в голове, что уже была встроена функция типа max-сравнение, о которой я просто забыл.

Ответы [ 12 ]

0 голосов
/ 12 апреля 2012

Эта тема имеет несколько решений. Если у вас было более двух дат для сравнения, «unpivot» может быть предпочтительнее, чем написать серию операторов. Следующее явно нагло украдено у Niikola :

select id, max(dDate) MostRecentDate
  from YourTable
    unpivot (dDate for nDate in (Date1, Date2, Date3)) as u
  group by id 

Тогда вы можете order by dDate, если это будет полезно.

0 голосов
/ 05 января 2009

AFAIK, нет встроенной функции для получения максимум двух значений, но вы можете легко написать свое собственное как:

CREATE FUNCTION dbo.GetMaximumDate(@date1 DATETIME, @date2 DATETIME)
RETURNS DATETIME
AS
BEGIN
    IF (@date1 > @date2)
        RETURN @date1
    RETURN @date2
END

и назовите его

SELECT Id, dbo.GetMaximumDate(Date1, Date2)
FROM tableName
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...