복붙노트

[SQL] 어떻게 SQL과 중복 행을 삭제하려면?

SQL

어떻게 SQL과 중복 행을 삭제하려면?

나는 몇 가지 행이있는 테이블이 있습니다. 모든 행은 날짜 필드가 있습니다. 지금, 그것은 날짜의 중복 될 수 있습니다. 나는 모든 중복을 삭제하고 오직 최고 ID로 행을 저장해야합니다. 어떻게 가능 이것은 SQL 쿼리를 사용한다?

지금:

date      id
'07/07'   1
'07/07'   2
'07/07'   3
'07/05'   4
'07/05'   5

내가 원하는 것은 :

date      id
'07/07'   3
'07/05'   5

해결법

  1. ==============================

    1.

    DELETE FROM table WHERE id NOT IN
        (SELECT MAX(id) FROM table GROUP BY date);
    
  2. ==============================

    2.그래서 여기 사람이 같은 문제를 가로 질러 오는 경우 답변으로 제 의견입니다, 코멘트 권한이 없습니다 :

    그래서 여기 사람이 같은 문제를 가로 질러 오는 경우 답변으로 제 의견입니다, 코멘트 권한이 없습니다 :

    동일한 쿼리는 다음과 같이 보일 것이다, 그래서 sqlite3를에서 "ROWID"라는 암시 숫자 기본 키가 있습니다 :

    DELETE FROM table WHERE rowid NOT IN
    (SELECT MAX(rowid) FROM table GROUP BY date);
    

    그것은 "ID"라는 기본 키 열을 포함하지 않는 경우에도이 어떤 테이블에 함께 작동합니다.

  3. ==============================

    3.MySQL은, PostgreSQL을 들어, 오라클 좋은 방법은 자기 가입이다.

    MySQL은, PostgreSQL을 들어, 오라클 좋은 방법은 자기 가입이다.

    Postgresql:
    DELETE FROM table t1 USING table t2 WHERE t1.date=t2.date AND t1.id<t2.id;
    
    MySQL        
    DELETE FROM table
    USING table, table as vtable
    WHERE (table.id < vtable.id)
    AND (table.date=vtable.date)
    

    SQL 집계 (기준 최대 그룹) 기능은 거의 항상 매우 느리다.

  4. from https://stackoverflow.com/questions/1173963/how-to-delete-duplicate-rows-with-sql by cc-by-sa and MIT license