2012-04-09 52 views
-1

我有一個等級分貝,看起來是這樣的:選擇並刪除過期的重複記錄?

StudentId | SubjectCode | Grade | DateApproved 

Student1 | SUBJ1234 | - | 30-3-2012<br/> 
Student1 | SUBJ1234 | 2.25 | 31-3-2012<br/> 
Student1 | SUBJ45678 | 2.00 | 31-2012 

如果你會發現,有一個過時的重複與空白等級(由"-"表示)。

我想從數據庫中選擇所有空白等級,因爲它有一個複製但更多的最近項目,所以我可以刪除它們。

如何在SQL (MySql 5.5)中執行此操作?

+6

**您嘗試了什麼?** – gdoron 2012-04-09 02:57:46

回答

1

你可以試試這個:

SELECT * 
    FROM yourTableName as t1 
    WHERE t1.Grade = "-" 
     AND EXISTS (SELECT * 
        FROM yourTableName as t2 
        WHERE t1.StudentId = t2.StudentId 
         AND t1.SubjectCode = t2.SubjectCode 
         AND t1.DateApproved < t2.DateApproved 
       ) 

的代碼基本上是選擇從表中的所有領域,具有等級設置爲-,並且存在具有相同StudentIdSubjectCode和較高的(較新的紀錄)DateApproved

編輯:如果你想要的「新」記錄有一個定義Grade(比-等),添加:在內部查詢的最後條件後AND t2.Grade != '-',右括號前。