如何从CTE更新第二张表,以便它可靠地工作

时间:2018-11-09 08:22:58

标签: tsql sql-update common-table-expression partitioning

对于以下使我发疯的机器人性能数据问题,请教一些建议真是太好了!我们在5个设施中拥有23个机器人,并将它们中的Spot数据(放置和拾取位置)收集到一个大表中。我有两个表#Temp2和#Temp2d如下:

#Temp2
 ID   Spot LastDiff
76544  21    23
76545  21     0
76546  23    21
76547  23     0
76548  21    35
76549  23    21
76550  21    23
76551  23    21

#Temp2d
IDmin  Spot LastDiff
76544   21    23
76546   23    21
76548   21    23
76549   23    21
76550   21    23
76551   23    21

表#Temp2d源自#Temp2,并记录竞价编号的各个更改(重复的竞价编号已删除)。 (这90,000条记录的竞价编号数据由未显示的其他两列FacilityName和Robot划分)。 然后,我向#Temp2添加新列“ LastDiff”,以保存Spot更改前的最后一个不同值。要更新#Temp2的LastDiff列,请使用以下更新查询:

;with cte_1 as
        (
        select t1.IDmin, t1.spot, t1.lastDiff
        from
            (
            select 
                IDmin
                , spot
                , LAG(spot,1,0) OVER(PARTITION BY FacilityName, Robot ORDER BY FacilityName, Robot) AS lastDiff

            from #Temp2d
            ) t1
        )  
        update #Temp2 set #Temp2.lastDiff = cte_1.lastDiff
        from cte_1
        where #Temp2.ID = cte_1.IDmin

问题在于,在#Temp2中的90,000行数据集中,大约30个LastDiff值是错误的,如上面的#Temp2表中的76,548行所示。错误似乎没有任何模式,它们在整个数据集中随机发生。解决该问题的任何帮助将不胜感激。

0 个答案:

没有答案