2012-04-09 25 views
-1

ich ein Grading db haben, sieht wie folgt aus:Wählen und löschen Sie veraltete doppelte Datensätze?

StudentId | SubjectCode | Grade | DateApproved 

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

Wenn Sie bemerken, gibt es ein überholtes Duplikat mit einem leeren Klasse (dargestellt durch "-").

Ich möchte alle leeren Noten aus der db auswählen, die eine doppelte, aber mehr aktuelle Element, so dass ich sie löschen kann.

Wie mache ich das in SQL (MySql 5.5)?

+6

** WAS HAST DU VERSUCHT? ** – gdoron

Antwort

1

Sie können dies versuchen:

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 
       ) 

Der Code wählt grundsätzlich alle Felder aus Ihrer Tabelle, die die Klasse haben festgelegt, wie - und es ist eine Aufzeichnung, die die gleiche StudentId und SubjectCode und eine höhere (neuere hat) DateApproved.

EDIT: Falls Sie die „neue“ Datensatz eine definierte Grade (außer -) zu haben, fügen: AND t2.Grade != '-' nach dem letzten Zustand in der inneren Abfrage, bevor der schließenden Klammer.

Verwandte Themen