2017-10-29 4 views
1

나는 다음과 같다 테이블이 있습니다모든 중복 항목을 제거하지만 처음

+ id + lastSeen + lastSeenMS + value + 
| 1 | 1509272314 |  123 | 12 | 
| 2 | 1509272314 |  123 | 19 | 
| 3 | 1509272314 |  123 | 17 | 
| 4 | 1509272532 |  453 | 25 | 

이 지금은 같은 lastSeenlastSeenMS 값이 첫 번째 항목 남기고 모두 삭제해야합니다.

나는 GROUP BY lastSeen, lastSeenMS을 사용하는 것에 대해 생각했지만 첫 번째 항목이 아닌 마지막 항목 만 삭제하는 방법을 잘 모르겠습니다.

답변

4

당신은 사용할 수 있습니다

DELETE FROM table_name 
WHERE ID NOT IN (SELECT MIN(ID) 
       FROM table_name 
       GROUP BY lastSeen, lastSeenMS); 

Rextester Demo

기록을 그룹별로 가장 낮은 ID로 테이블에 남아있을 것입니다. 경고! IDUNIQUENOT NULL 인 경우에만이 방법을 사용하십시오.


편집 :

위와 동일 로직하지만, MySQL의 사투리에 적용 :

DELETE t1 
FROM tab t1 
LEFT JOIN (SELECT MIN(ID) AS ID 
      FROM tab 
      GROUP BY lastSeen, lastSeenMS) t2 
    ON t1.ID = t2.ID 
WHERE t2.ID IS NULL; 

Rextester Demo

+0

이 주위에 방법이 있나요 :'# 1093 - FROM 절의 업데이트 대상 테이블 '레코드'를 지정할 수 없습니다. 그것은 select와 delete를 실행하는 동일한 데이터베이스입니다. – Pascal

+0

@Pascal 확실히, 업데이트 확인 – lad2025

관련 문제