仅选择冗余行,而不是原始行

时间:2017-05-11 10:04:13

标签: mysql sql

因此,我的任务是清理已生成冗余订单的系统。

问题的数据示例

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 BYHAVING COUNT(*) > 1轻松识别哪些订单有重复项,但棘手的部分是删除原始订单。

甚至可能吗?

非常感谢任何帮助。

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

SQL Fiddle