Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

Nhận một bản ghi hàng đầu của cùng một FK vào chênh lệch ngày

Ý tưởng như sau

  • Chọn tất cả con đặt hàng trong vòng một giờ với ID (Cha mẹ) tối thiểu có thể. (Tôi giả định rằng ở đây OrderID thấp nhất cũng sẽ là cũ nhất OrderID).
  • Nối các kết quả này với bảng gốc.
  • Sử dụng các kết quả này làm cơ sở cho tuyên bố cập nhật.

Câu lệnh 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. Nối nhiều hàng

  2. Trả lại nhiều bảng từ một thủ tục được lưu trữ

  3. Làm cách nào để tìm hiểu ràng buộc FOREIGN KEY nào tham chiếu đến bảng trong SQL Server?

  4. Cùng một truy vấn - các kế hoạch thực thi khác nhau

  5. Ví dụ về Chuyển đổi "date" thành "smalldatetime" trong SQL Server (T-SQL)