Sql 删除表中的重复行

Sql 删除表中的重复行,sql,oracle,duplicates,Sql,Oracle,Duplicates,我有一个包含订单信息的表格,如下所示: 订单表: 从该表中可以看出,每个订单都有多个副本。所以我想要的是每个订单只保留一行,不管是哪一行 有人知道怎么做吗?仅供参考,我正在使用Oracle 10即使在您的旧版和过时的Oracle版本中,这也应该有效: delete from order_table where rowid not in (select min(rowid) from order_table g

我有一个包含订单信息的表格,如下所示:

订单表:

从该表中可以看出,每个订单都有多个副本。所以我想要的是每个订单只保留一行,不管是哪一行


有人知道怎么做吗?仅供参考,我正在使用Oracle 10

即使在您的旧版和过时的Oracle版本中,这也应该有效:

delete from order_table
where rowid not in  (select min(rowid)
                     from order_table
                     group by order_no);

如果您不关心每个订单的哪一行,Oracle 12之前最简单的解决方案可能是:

select [whatever columns you want, probably not rn - see below]
from ( select order_table.*,
              row_number() over (partition by order_no order by null) as rn
     )
where rn = 1
;

以下是一个查询,用于按不同字段删除具有精确顺序的半重复项:

delete from message_part
where ts >= since and ts < since + 1
    and rowid not in (
        select distinct first_value(rowid) over (partition by id order by differing_field)
        from message_part where ts >= since and ts < since + 1
    );

信用卡归@a_horse_,没有名字,

请不要张贴代码/表格的图片。请用正确的格式将其直接粘贴到您的问题中。另外,请分享您的尝试。@CodeDecode:这不是重复的。SQL Server解决方案无法与Oracle配合使用。谢谢您的回答。抱歉,我没有澄清,订单表不是实际的表,它只是我查询结果的一个屏幕截图。因此,当我运行您的查询时,它会显示一条错误消息。那么,有没有办法只为每个订单选择一行,而不是删除其他行?会出现什么错误?如果您未能向我们显示正确的表名和列名,那么您必须自己将我的示例转换为正确的名称。我认为她/他指的是,他/她不需要从基表中删除任何内容。相反,他/她想知道如何在每个订单中只包含一行。\u不,结果集中的哪一行无关紧要。@mathguy:问题是删除重复行。我知道。我在托福英语作为外语的考试中获得了很高的分数,当我到达美国时,如果我的生活依赖于它,我仍然不能说一口流利的英语。我是根据她/他在你答案下方的评论来解释的。。。要为每一行仅选择一行。。。屏幕截图不是一个表,它来自我的查询结果。因此,她/他希望从查询结果中删除,而不是从基表中删除。