在SQL / Transact SQL中,我试图更新临时表以从3个不同的日期列(在该临时表中)中获取最新日期,并将该MAX日期放入“最新日期”列。
使用更新语句执行此操作的最佳方法是什么?
答案 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?