2017-03-24 241 views
-2

我在表中有重複的記錄,並且想要使用標識列值刪除它們。我想要列「Fname」和「Lname」來唯一標識每條記錄。但是有不同上傳日期的重複Fname和Lname。以下是我設計用來解決問題的SQL查詢,但將採用Min(id)而不是Max(uploaddate)。請幫助修復此代碼。刪除sql表中的重複記錄

Select Max(uploaddate), 
    Min(id), 
    Fname, 
    Lname 
From tbl 
Group By Fname, Lname 
+0

對此進行了測試您應該將sql代碼格式化爲代碼,方法是選擇sql語句並按{}按鈕。 –

+0

我以爲我有一個答案,但我刪除它,因爲我想確認問題是什麼。根據我的理解,您需要一個查詢來生成一組使用上次記錄的ID的唯一記錄? –

+0

@yaredmuluneh你覺得我的responde有用嗎? – Pons

回答

1

這可能對你有所幫助,

注意

由於這是DELETE,在執行此之前,將其更改爲SELECT *,而不是DELETE和驗證輸出。如果你還好,結果改回DELETE

DELETE FROM MY_TABLE 
WHERE MY_TABLE.ROWID IN (
     SELECT ROWID 
     FROM (
     SELECT MY_TABLE.ROWID 
      , ROW_NUMBER() OVER (PARTITION BY FNAME, LNAME ORDER BY UPLOADDATE DESC, ID ASC) RNK 
     FROM MY_TABLE 
    ) TMP 
     WHERE RNK = 2 
    ) 

我不確定你的數據庫是什麼。我已經用ORACLE