表格具有以下结构
ID, OrderNumber, PFirstName, PLastName, Product, LastDateModified
此信息通过XML导入文件填充到我的SQL Server数据库中,并在前端点击“输入”时创建。但是前面的某个人看到了错误,然后点击取消并重新提交了包含新信息的订单。
现在,第一个订单是在数据库中,因为它们首先没有在后端取消它。
如何在任何OrderNumber, PFirstName, PLastName, Product
条目的3天内找到任何重复的lastdatemodified
?
答案 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
但考虑到你试图从中恢复,我不认为这是一件坏事。
我不确定如何确定它是否被取消或退出,因此您必须设置其他限制,因为问题中没有指定。