Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Ottieni il primo record dello stesso FK sulla differenza di data

L'idea è la seguente

  • Seleziona tutto figlio ordini entro un'ora con il suo ID (genitore) minimo possibile. (Presumo qui che l'ID ordine più basso sarà anche il più vecchio ID ordine).
  • Unisci questi risultati alla tabella originale.
  • Utilizza questi risultati come base della dichiarazione di aggiornamento.

Istruzione 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