在日期差异上获得相同FK的前一记录

Kas*_*hif 6 sql t-sql sql-server-2005

我需要在一小时内从同一客户那里获得前1名记录.如果在一小时后插入记录,则不需要该记录.请参阅下表.这只是1000个记录的样本.我正在使用SQL Server 2005.

替代文字http://img651.imageshack.us/img651/3990/customershavingmultiple.png

Lie*_*ers 1

思路如下

  • 选择一小时内的所有订单及其最小可能的(父)ID。(我在这里假设最低的 OrderID 也将是最旧的OrderID)。
  • 将这些结果与原始表连接起来。
  • 使用这些结果作为更新语句的基础。

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
Run Code Online (Sandbox Code Playgroud)