我有一个包含以下列的表
以下是一些记录
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
非常感谢您提前
答案 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)