sql >> Base de Datos >  >> RDS >> Sqlserver

Obtenga el primer registro del mismo FK en la diferencia de fechas

La idea es la siguiente

  • Seleccionar todos los hijos pedidos dentro de una hora con su mínimo posible (Padre)ID. (Supongo aquí que el ID de pedido más bajo también será el más antiguo Id. de pedido).
  • Une estos resultados con la tabla original.
  • Utilice estos resultados como base para la declaración de actualización.

Declaración 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