使用多列的最小日期时间更新临时表
Posted
技术标签:
【中文标题】使用多列的最小日期时间更新临时表【英文标题】:Update temp table with min datetime of multiple columns 【发布时间】:2021-03-09 13:38:40 【问题描述】:如何更新我的#temp 表中的以下列“LowestFinishDate”以保存列 [“Finished_OldDate”、“Finished_NewDate”和“Current_FinishedDate”] 的绝对最小值?
这是 Parent0000 的表格的样子:
所以在这种情况下,我希望将 Parent0000 的 #temp.[LowestFinishDate] 中的所有 7 行更新为最低日期,即:
2020-11-25 14:15.
我已尝试执行 CROSS/OUTER APPLY 并使用表值构造函数,但由于某种原因,每个 LowestFinishDate 行都会使用 Current_FinishedDate 的对应值进行更新。
提前致谢
【问题讨论】:
【参考方案1】:一种方法是将MIN
与子查询和VALUES
表结构一起使用:
UPDATE YT
SET LowestFinishedDate = (SELECT MIN(V.FinishDate)
FROM (VALUES (YT.FinishedOldDate),
(YT.FinishedNewDate),
(YT.CurrentFinishDate)) V(FinishDate)
WHERE V.FinishDate IS NOT NULL)
FROM dbo.YourTable;
【讨论】:
【参考方案2】:在 SQL Server 中,我倾向于这样写:
with toupdate as (
select t.*,
min(least_date) over (partition by t.parentid) as new_lowestfinishdate
from #temp t cross apply
(select min(dte) as least_date
from (values (t.Finished_OldDate),
(t.Finished_NewDate)
(t.Current_FinishedDate)
) v(dte)
) v
)
update toudpate
set lowestfinishdate = new_lowestfinishdate;
cross apply
采用每行中日期的最小值。然后窗口函数在所有行中为父 id 取最小值。
【讨论】:
以上是关于使用多列的最小日期时间更新临时表的主要内容,如果未能解决你的问题,请参考以下文章