在日期差异上获得相同 FK 的前一项记录 [英] Get top one record of same FK on date difference

查看:21
本文介绍了在日期差异上获得相同 FK 的前一项记录的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我需要在一小时内插入来自同一客户的前 1 条记录.如果一小时后插入记录,则不需要该记录.请参见下表.这只是 1000 条记录的样本.我使用的是 SQL Server 2005.

I need to get top 1 record from same customer inserted within one hour. If record is inserted after one hour then don't need that one. Please see following table. This is just a sample of 1000s of records. I am using SQL Server 2005.

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

推荐答案

思路如下

  • 选择一小时内的所有订单及其可能的最小(父)ID.(我在这里假设最低的 OrderID 也将是最旧的 OrderID.
  • 将这些结果与原始表格结合起来.
  • 使用这些结果作为更新语句的基础.
  • Select all child orders within one hour with its minimum possible (Parent)ID. (I am assuming here that the lowest OrderID will also be the oldest OrderID).
  • Join these results with the original table.
  • Use these results as the basis of the update statement.

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

这篇关于在日期差异上获得相同 FK 的前一项记录的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆