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

3列でグループ化し、日付で並べ替えた古いレコードを削除します

    ROW_NUMBERを使用します 各グループの最新ではない行を検索する分析関数を使用すると、ROWIDを使用できます。 DELETEで相関する疑似列 :

    DELETE FROM tmp_data
    WHERE ROWID IN (
      SELECT rid
      FROM   (
        SELECT ROWID As rid,
               ROW_NUMBER() OVER (
                 PARTITION BY col_2, col_3, col_6
                 ORDER BY col_4 DESC
               ) AS rn
        FROM   tmp_data
      )
      WHERE rn > 1
    )
    

    22行が削除されます。

    db <> fiddle ここ




    1. Perlでのクロール中にMySQLサーバーが消えました

    2. javajdbcとプリペアドステートメントを使用したCREATEDATABASEクエリは、構文エラーを返します

    3. トリガーの挿入値を取得する方法

    4. 決算在庫数量、価格、値をFIFOで計算