繁体   English   中英

使用多列的最小日期时间更新临时表

[英]Update temp table with min datetime of multiple columns

如何更新 #temp 表中的以下列“LowestFinishDate”以保存列 [“Finished_OldDate”、“Finished_NewDate”和“Current_FinishedDate”] 的绝对最小值?

这是 Parent0000 的表格:

表结构

因此,在这种情况下,我希望将 Parent0000 的 #temp.[LowestFinishDate] 中的所有 7 行更新为最低日期,即:

2020-11-25 14:15。

我尝试过 CROSS/OUTER APPLY 并使用表值构造函数,但由于某种原因,每个 LowestFinishDate 行都会使用 Current_FinishedDate 的对应值进行更新。

提前致谢

在 SQL 服务器中,我倾向于将其写为:

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取每行中日期的最小值。 window function 然后在所有行中为父 id 取最小值。

一种方法是将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;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM