Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Obtenez le premier enregistrement du même FK à la différence de date

L'idée est la suivante

  • Sélectionner tous les enfants commandes dans l'heure avec son ID (Parent) minimum possible. (Je suppose ici que le OrderID le plus bas sera également le plus ancien ID de commande).
  • Joindre ces résultats avec le tableau d'origine.
  • Utilisez ces résultats comme base de la déclaration de mise à jour.

Instruction 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