所以我的任务是清理一个产生多余订单的系统。
问题的数据示例
ORDER ID, SERIAL, ...
1 1
2 1
3 2
4 2
5 3
6 3
7 3
以上数据表明,序列1生成了2个订单,序列2生成了2个订单,序列3生成了3个订单,这是不允许的,每个序列应该只有一个订单。
因此,我需要一个只能识别冗余订单的查询。我想把原来的订单排除在外。
因此,上述数据的输出应该是:
REDUNDANT ORDER IDS
2
4
6
7
使用GROUP BY
和HAVING COUNT(*) > 1
,我可以很容易地识别哪些订单有重复,但棘手的部分是删除原始订单。
有可能吗?
任何帮助都是非常感谢的。
发布于 2017-05-11 11:35:38
如评论中所示,以下是实现这一目标的一种方法:
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
SQL Fiddle
https://stackoverflow.com/questions/43912340
复制相似问题