因此,我的任务是清理已生成冗余订单的系统。
问题的数据示例
ORDER ID, SERIAL, ...
1 1
2 1
3 2
4 2
5 3
6 3
7 3
以上数据显示,使用序列1,2生成2个订单,使用序列2生成2个订单,使用序列3生成3个订单。这是不允许的,每个序列应该只有一个订单。
所以我需要一个只能识别REDUNDANT订单的查询。我希望查询排除原始订单。
因此上述数据的输出应为:
REDUNDANT ORDER IDS
2
4
6
7
我可以使用GROUP BY
和HAVING COUNT(*) > 1
轻松识别哪些订单有重复项,但棘手的部分是删除原始订单。
甚至可能吗?
非常感谢任何帮助。
答案 0 :(得分:1)
正如评论中所述,这是实现这一目标的一种方法:
SELECT T1.ORDER_ID as redundant
FROM thetable T1
LEFT JOIN
(
SELECT SERIAL, MIN(ORDER_ID) AS firstorder
FROM thetable
GROUP BY SERIAL
HAVING COUNT(*) > 1
) T2 ON T1.ORDER_ID=T2.firstorder
WHERE T2.firstorder IS NULL