2012-04-09 6 views
-1

은 다음과 같습니다오래된 중복 레코드를 선택하고 삭제 하시겠습니까? 나는 등급의 DB를 가지고

StudentId | SubjectCode | Grade | DateApproved 

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

당신이 알 수있는 경우, ("-"으로 표시) 빈 등급과 오래된 중복이있다.

DB에서 모든 빈 등급을 선택하고 싶습니다. 더 중복 된 항목이 더 최근 항목이므로 삭제할 수 있습니다.

SQL (MySql 5.5)의 경우 어떻게해야합니까?

+6

** 시도한 내용 ** – gdoron

답변

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 != '-'을 추가하십시오.

관련 문제