Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Holen Sie sich den ersten Datensatz desselben FK nach Datumsunterschied

Die Idee ist wie folgt

  • Alle untergeordneten auswählen Bestellungen innerhalb einer Stunde mit seiner minimal möglichen (Eltern-)ID. (Ich gehe hier davon aus, dass die niedrigste OrderID auch die älteste sein wird OrderID).
  • Verbinden Sie diese Ergebnisse mit der Originaltabelle.
  • Verwenden Sie diese Ergebnisse als Grundlage für die Update-Anweisung.

SQL-Anweisung

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