sql >> データベース >  >> RDS >> Mysql

アーカイブされたレコードテーブルの重複エントリをクリアするにはどうすればよいですか?

    CHECKSUM()を使用します すべての列をチェックせずに、データが同一で​​あるかどうかを確認する関数。

    次のようなものがあると仮定します:

    create table #t (log_id int, c varchar(10), d int, log_date date)
    
    insert #t values
    (1, 'aaaaa', 1, '20140101'),
    (1, 'aaaaa', 1, '20140102'),
    (1, 'aaaaa', 1, '20140103'),
    (1, 'bbbbb', 1, '20140104'),
    (2, 'ccc', 10, '20140103'),
    (2, 'cdd', 10, '20140105')
    

    2行目と3行目のデータは重複しています。データをクリーンアップするには、次のステートメントを実行します:

    with x as (
    select *, row_number() over(partition by log_id, checksum(log_id, c, d) order by log_date) as rn
    from #t
    )
    delete x where rn > 1
    


    1. Oracle外部テーブルの例

    2. postgresでの動的SQLクエリ

    3. Mysql-ビューからのEXPLAINSELECTは、メインテーブルのすべての行を検索しています

    4. 接続に失敗しました:php_network_getaddresses:getaddrinfoに失敗しました:名前またはサービスが不明です