SQL / T-SQL - как получить значение MAX из 1 из N столбцов? - PullRequest
3 голосов
/ 15 января 2009

В SQL / Transact SQL я пытаюсь обновить временную таблицу, чтобы взять самую последнюю дату из 3 разных столбцов даты (в этой временной таблице) и поместить эту МАКСИМАЛЬНУЮ дату в столбец «самая последняя дата».

Каков наилучший способ сделать это, используя оператор обновления?

Ответы [ 6 ]

6 голосов
/ 15 января 2009

Только с тремя это не так сложно ... Это определенно не расширяется до произвольного числа столбцов даты и времени!

 Select Case When DT1 > DT2 And DT1 > DT3 Then DT1
             When DT2 > Dt3 Then Dt2 Else DT3 End
 From TableName
4 голосов
/ 15 января 2009

Я думаю, вам нужно нормализовать вашу базу данных с

RecordID, Столбец1, Столбец2, Столбец3

до

RecordID, ColumnID, значение

Тогда вы сможете легко найти максимальное значение в трех столбцах ...

2 голосов
/ 15 января 2009

Возможно объединение?

select max(myDate)
from (
    select field_1 myDate from myTable where ...
    union all
    select field_2 myDate from myTable where ...
    union all
    select field_3 myDate from myTable where ...
) d

Конечно, это попадает в таблицу три раза для одной и той же строки. CTE, вероятно, решит это:

with myRow as (
    select field_1, field_2, field_3 from myTable where ...
)
select max(myDate)
from (
    select field_1 myDate from myRow
    union all
    select field_2 myDate from myRow
    union all
    select field_3 myDate from myRow
) d
1 голос
/ 15 января 2009
SELECT 
(CASE WHEN field_1 > field_2 THEN 
    CASE WHEN field_1 > field_3 THEN field_1 ELSE field_3 END
ELSE
    CASE WHEN field_2 > field_3 THEN field_2 ELSE field_3 END
END) AS maximum_date
FROM table
0 голосов
/ 15 января 2009

Oracle имеет оператор GREATEST, вы можете имитировать его с помощью функций или операторов case

Смотрите этот вопрос:

Есть ли в SQL Server функция Max, которая принимает два значения, такие как Math.Max ​​в .NET?

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

Вы можете использовать 3 оператора «Если», начиная с первой даты. Затем, после 3-го утверждения «Если», вы узнаете, какая дата является максимальной (максимальной) ...

Затем сохраните это в переменной и работайте оттуда.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...