在3天内复制SQL记录条目

时间:2017-05-18 16:26:09

标签: sql-server

表格具有以下结构

ID, OrderNumber, PFirstName, PLastName, Product, LastDateModified

此信息通过XML导入文件填充到我的SQL Server数据库中,并在前端点击“输入”时创建。但是前面的某个人看到了错误,然后点击取消并重新提交了包含新信息的订单。

现在,第一个订单是在数据库中,因为它们首先没有在后端取消它。

如何在任何OrderNumber, PFirstName, PLastName, Product条目的3天内找到任何重复的lastdatemodified

1 个答案:

答案 0 :(得分:0)

使用简单的where子句进行自联接。

假设订单编号没有重复,那就是你要找的东西。

SELECT A.ID as A_ID
     , A.orderNumber as OriginalOrder
     , B.ID as B_ID
     , B.OrderNumber as PossibleDuplicatedOrder
FROM TBL A
INNER JOIN TBL B
  on A.PFirstName = B.PfirstName
 AND A.PLastName = B.PLastName
 AND A.Product = B.Product
 AND A.LastDateMOdified < B.LastDateModified
WHERE datediff(day,A.LastDateModified,B.LastDateModified) <=3

逻辑上,这个自我加入并消除A - > B和B - &gt;由自联接引起的重复我们使用&lt;这样,当其他字段相等时,别名A中的所有记录的日期都早于B中的日期,然后我们只需查找具有&lt; = 3的日期值的那些日期。

但是,如果同一订单存在多个重复项,例如

A-->B
B-->C

你会在结果中看到重复,例如(但只有当所有3个都在3天内完成时)

A-->B
B-->C
A-->C

但考虑到你试图从中恢复,我不认为这是一件坏事。

我不确定如何确定它是否被取消或退出,因此您必须设置其他限制,因为问题中没有指定。