Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Obtenha o primeiro registro do mesmo FK na diferença de data


A ideia é a seguinte
  • Selecione todos os filhos pedidos dentro de uma hora com seu mínimo possível (Parent)ID. (Estou assumindo aqui que o OrderID mais baixo também será o mais antigo Código do pedido).
  • Junte esses resultados com a tabela original.
  • Use esses resultados como base da declaração de atualização.

Instrução SQL
UPDATE  Orders
SET     ParentOrderID = p.ParentOrderID
FROM    Orders o
        INNER JOIN (
          SELECT  ParentOrderID = MIN(o1.OrderID), OrderID = o2.OrderID
          FROM    Orders o1
                  LEFT OUTER JOIN Orders o2 ON 
                    o2.CustomerID = o1.CustomerID
                    AND o2.OrderDate > o1.OrderDate
                    AND DATEADD(hh, -1, o2.OrderDate) < o1.OrderDate
          GROUP BY o2.OrderID
        ) p ON p.OrderID = o.OrderID