SQL / T-SQL - 如何从N列中的1列中获取MAX值?

时间:2009-01-14 22:39:27

标签: sql tsql

在SQL / Transact SQL中,我试图更新临时表以从3个不同的日期列(在该临时表中)中获取最新日期,并将该MAX日期放入“最新日期”列。

使用更新语句执行此操作的最佳方法是什么?

6 个答案:

答案 0 :(得分:6)

只有三个并不那么难......这绝对不能扩展到任意数量的日期时间列!

 Select Case When DT1 > DT2 And DT1 > DT3 Then DT1
             When DT2 > Dt3 Then Dt2 Else DT3 End
 From TableName

答案 1 :(得分:4)

我认为您需要从

规范化数据库

RecordID,Column1,Column2,Column3

RecordID,ColumnID,Value

然后,您将能够轻松找到三列中的最大值...

答案 2 :(得分:2)

也许是工会?

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

答案 3 :(得分:1)

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

答案 4 :(得分:0)

您可以使用3个'If'语句,从第一个日期开始。然后在第3个'If'语句之后,您将知道哪个是最高(最长)日期...

然后将其存储在变量中并从那里开始工作。

答案 5 :(得分:0)

Oracle有GREATEST语句,你可以用函数或case语句来模拟它

看到这个问题:

Is there a Max function in SQL Server that takes two values like Math.Max in .NET?