我试图在数据集中找到重复的订单,我可以从中搜索。
表:Transaction_Data
列:Guest_ID、Order_ID、Name、Quote_Date、Arrival_Date、Sale_Location、Product_Code、Deposit_Amount
在您的分组表达式中有一个问题,您已经包含了Order_ID
,但这是唯一的,因此不重复。要找到重复的字段,您需要从比较中删除该字段。
这个响应强调了一个标准的解决方案,通过使用ROW_NUMBER()
窗口函数按您的分组集划分,选择只是重复的记录,然后我们只返回不是集中第一个记录的记录,所以只有重复的记录,而不是原始的。
- 窗口函数为我们提供了一种跨数据集计算与整个集合内联的聚合表达式的方法,因此无需实际分组结果。
有一个警告,如果我们想对聚合的结果进行过滤或分组,我们需要使用CTE或子查询来计算窗口函数。
;WITH AggregatedData as
(
SELECT Guest_ID,Order_ID
,ROW_NUMBER() OVER(
PARTITION BY Guest_ID, Quote_Date, Product_Code,Deposit_Amount
ORDER BY Order_ID
) AS Order_Duplicate
,Name,Quote_Date,Arrival_Date
,Sale_Location,Product_Code,Deposit_Amount
FROM Transaction_Data WHERE Quote_date >='2022-11-01' and Deposit_Amount NOT LIKE '-%'
)
SELECT Guest_ID,Order_ID,Name,Quote_Date,Arrival_Date
,Sale_Location,Product_Code,Deposit_Amount
FROM AggregatedData
WHERE Order_Duplicate > 1
ORDER BY Order_ID,Guest_ID
这应该只返回重复的记录,这通常更有用,因为这些记录代表最有可能需要撤销或退款的事务。