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

Få top én rekord af samme FK på datoforskel

Idéen er som følger

  • Vælg alle underordnede ordrer inden for en time med sit mindst mulige (forældre)ID. (Jeg antager her, at det laveste OrderID også vil være det ældste Ordre-id).
  • Sæt disse resultater sammen med den originale tabel.
  • Brug disse resultater som grundlag for opdateringserklæringen.

SQL-erklæring

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


  1. sql-forespørgsel for at hente posterne for de næste 30 dage

  2. Ydelse af sys.partitioner

  3. En begrænsning for at forhindre indsættelse af en tom streng i MySQL

  4. Sådan opsætter du Oracle EBS Auditing