删除Oracle中小于最大序列号的记录

时间:2014-04-08 13:34:51

标签: sql oracle11g

我有一个包含以下列的表

以下是一些记录

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的记录,并删除所有其他ORG_ID。

我希望在表格中看到的是

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

非常感谢您提前

1 个答案:

答案 0 :(得分:0)

您可以使用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)