【发布时间】:2010-10-01 11:49:45
【问题描述】:
在 SQL/Transact SQL 中,我正在尝试更新一个临时表以从 3 个不同的日期列(在该临时表中)获取最新日期,并将该 MAX 日期放入“最新日期”列。
使用更新语句的最佳方法是什么?
【问题讨论】:
在 SQL/Transact SQL 中,我正在尝试更新一个临时表以从 3 个不同的日期列(在该临时表中)获取最新日期,并将该 MAX 日期放入“最新日期”列。
使用更新语句的最佳方法是什么?
【问题讨论】:
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
【讨论】:
也许是工会?
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
当然,对于同一行,这会在表中命中 3 次。 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
【讨论】:
Oracle 有 GREATEST 语句,你可以用函数或 case 语句来模拟它
看到这个问题:
Is there a Max function in SQL Server that takes two values like Math.Max in .NET?
【讨论】:
只有三个并不难...这绝对不能扩展到任意数量的日期时间列!
Select Case When DT1 > DT2 And DT1 > DT3 Then DT1
When DT2 > Dt3 Then Dt2 Else DT3 End
From TableName
【讨论】:
您可以使用 3 个“如果”语句,从第一个日期开始。然后在第三个“If”语句之后,您将知道哪个是最高(最大)日期...
然后将其存储在一个变量中并从那里开始工作。
【讨论】:
我认为您需要从
规范化您的数据库记录 ID、列 1、列 2、列 3
到
记录ID、列ID、值
那么你就可以很容易地找到三列中的最大值了……
【讨论】: