2014-10-16 58 views
-2

我有如下表:PL/SQL查詢來刪除重複和替換數據

data_id new_data_id first_name last_name 

    1      john  smith 
    2      john  smith 
    3      john  smith 
    4      jeff  louis 
    5      jeff  louis 
    6      jeff  louis 

上表中有重複的姓和名,並了Data_ID是所有的人都不同。爲了刪除這些重複項,我需要編寫一個SQL查詢來替換new_data_id列中的最高data_id。我的輸出看起來像這樣:

data_id new_data_id first_name last_name 

    1   3   john  smith 
    2   3   john  smith 
    3   3   john  smith 
    4   6   jeff  louis 
    5   6   jeff  louis 
    6   6   jeff  louis 

我該怎麼做?

+1

氬你是否試圖刪除重複的記錄,或者你只是想用最大的ID來標記它們?請發佈您的特定RDBMS版本。 – AHiggins 2014-10-16 16:15:52

回答

1

你在找什麼是Oracle 分析功能

聚合函數MAX可用於從整個結果集中選擇最高的data_id,但這不完全是您需要的。通過FIRST_NAME和LAST_NAME

SELECT 
    data_id, 
    MAX(data_id) OVER (PARTITION BY first_name, last_name) AS new_data_id, 
    first_name, 
    last_name 
FROM employees 
ORDER BY data_id 

這是通過「分區」你的結果集,然後執行該子集內的給定函數:相反,使用它的密友,該MAX解析函數像這樣。

祝你好運!

這裏有一個小提琴:http://sqlfiddle.com/#!4/48b29/4

更多信息可以在這裏找到: http://docs.oracle.com/cd/E11882_01/server.112/e41084/functions004.htm#SQLRF06174

0

如果您需要在地方變化,相關的更新可能是寫一個最簡單的方法:

UPDATE T 
SET "new_data_id" = 
    (SELECT MAX("data_id") FROM T T2 
     WHERE T2."first_name" = T."first_name" 
      AND T2."last_name" = T."last_name") 

http://sqlfiddle.com/#!4/51a69/1