Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Zdobądź najwyższy rekord tego samego FK w różnicy dat

Pomysł jest następujący

  • Zaznacz wszystkie podrzędne zamówienia w ciągu godziny z minimalnym możliwym (Parent)ID. (Zakładam tutaj, że najniższym OrderID będzie również najstarszy ID zamówienia).
  • Połącz te wyniki z oryginalną tabelą.
  • Użyj tych wyników jako podstawy oświadczenia o aktualizacji.

Oświadczenie 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


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Entity Framework EF4.1 — nie można znaleźć procedury składowanej w kontenerze

  2. Dlaczego narzędzia do monitorowania baz danych w chmurze dla SQL Server są cenne

  3. Wartość null w typie danych varbinary parametru

  4. Użyj wielu słów w ciągu wejściowym wyszukiwania pełnotekstowego

  5. Najlepszy sposób na niszczenie danych XML w kolumnach bazy danych SQL Server