我有一個非常大的表,其中包含從多個系統收集的數據。我現在必須根據條件和多列刪除重複記錄。Oracle如何刪除基於多個數據庫列和條件的重複項
下面是一個例子:
+---------------+-------------+------+-----+--------
| System ID | Debt Num | Exp Dt | Account NO |
+---------------+-------------+------+-----+---------
| pay | 2222 | 0114 | 111 |
| pay | 2222 | 0214 | 111 |
| Online | 2222 | 0214 | 111 |
| Online | 3333 | 0115 | 222 |
| Online | 3333 | 0116 | 222 |
| ERP | 2222 | 0214 | 111 |
| ERP | 4444 | 0114 | 333 |
+---------------+-------------+------+-----+--------
從以上數據,以滿足以下條件刪除重複。
- 通過借方num,exp dt,account-no刪除重複行組,並使用max(exp dt)保留一條記錄。
- 要保留的記錄基於優先級爲
System ID
。 1)支付2)在線和3)ERP。在上面的帳戶111中,我們有來自所有三個系統的記錄,並且借記卡的max(exp dt)是所有三個系統中的0214。只有Pay
與exp dt = 0214的記錄應該保留,並且休息應該被刪除。 - 如上面的帳戶222示例,我們沒有來自薪酬的記錄,因此優先考慮系統Online和保留max(exp dt)的ERP。
我已經嘗試過在線查找多個查詢,比如group by,row_number,但都滿足一個條件。
感謝您的幫助,貢獻您的想法和建議。
EDIT
:戈登的查詢工作正常,符合我的要求,但是當我在包含540K行的分段上運行相同時,它錯誤地出現了ORA-00600內部錯誤。
你看過Oracle MERGE命令嗎? – scraatz
@scraatz直到現在。我只是看了一下例子'merge into when matched .. when not match from http://www.oracle-base.com/articles/10g/merge-enhancements-10g.php。它是否正確?你有更好的參考嗎?順便說一句,好的想法和好建議。我會嘗試。 – dicaprio
對不起,我最近才發現它試圖解決類似的問題。我搜索了「從聯接中刪除oracle」,就像其他數據庫一樣,您可以從連接的表中刪除這在Oracle上是不可能的。 – scraatz