Как мне обновить вторую таблицу из cte, чтобы она работала надежно - PullRequest
0 голосов
/ 09 ноября 2018

Было бы здорово получить совет по поводу следующей проблемы с данными о производительности робота, которая сводит меня с ума! У нас есть 23 робота на 5 объектах, и данные 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 и записывает отдельные изменения в номере Spot (повторные номера Spot были удалены). (Данные о количестве записей в 90 000 записей разделены на два других столбца, которые не показаны, FacilityName и Robot). Затем я добавляю новый столбец «LastDiff» в # Temp2 для хранения последнего другого значения Spot, прежде чем оно изменилось. Для обновления столбца LastDiff # Temp2 используется следующий запрос на обновление:

;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

Проблема в том, что в наборе данных строки 90 000 около 30 значений LastDiff в # Temp2 являются неправильными, как показано в строке 76 548 в приведенной выше таблице # Temp2. Похоже, что ошибки не обнаружены, они происходят случайным образом по всему набору данных. Любая помощь в решении этой проблемы была бы очень признательна.

...