【问题标题】:Deleting records less than max sequence number in Oracle在Oracle中删除小于最大序列号的记录
【发布时间】:2014-05-21 05:57:14
【问题描述】:

我有一个包含以下列的表格

以下是部分记录

DOC_ID  DOC_NAME  ORG_ID ADD_DT
1                123.DOC              1            4/1/2014
2                124.DOC              1            4/2/2014
3                125.DOC              1            4/1/2014
4                126.DOC              1            4/1/2014
5                123.DOC              2            4/1/2014
6                124.DOC              2            4/2/2014
7                125.DOC              2            4/1/2014
8                126.DOC              2            4/1/2014

如何保留每个 ORG_ID 的最大 DOC_ID 记录并删除所有其他记录。

我想在我的表格中看到的是

DOC_ID  DOC_NAME  ORG_ID ADD_DT
4                126.DOC              1            4/1/2014
8                126.DOC              2            4/1/2014

非常感谢您

【问题讨论】:

    标签: sql oracle11g


    【解决方案1】:

    您可以使用rank() 分析函数来查找要删除的行,并使用rowid 伪列在它们之间进行关联。

    DELETE FROM my_table
    WHERE ROWID IN (SELECT ROWID 
                    FROM   (SELECT RANK() OVER 
                            (PARTITION BY org_id ORDER BY doc_id DESC) AS rk
                            FROM   my_table)
                     WHERE rk > 1)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-02-04
      • 2011-05-10
      • 1970-01-01
      • 2016-10-24
      • 2020-11-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多