2012-04-09 21 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 != '-',右括号前。