1. ホーム
  2. sql

[解決済み】T-SQL。重複する行をすべて削除するが、1つは残す[重複]。

2022-03-30 09:31:55

質問

非常に多くの行を持つテーブルがあります。重複は許されませんが、行の作成方法に問題があるため、このテーブルには重複があることが分かっています。 主要な列の観点から、余分な行を削除する必要があります。他のいくつかの列には わずかに のデータとは異なりますが、それは気にしません。しかし、私はこれらの行のうちの1つを保持する必要があります。SELECT DISTINCT はすべてのカラムを操作するのでうまくいきませんが、キーカラムに基づいて重複を抑制する必要があります。

余分な行を削除しても、1行を効率的に残すにはどうしたらよいでしょうか?

どのように解決するのですか?

お使いのバージョンが書かれていませんでしたが、SQL 2005 以降では、共通テーブル式に OVER句 . それは少し次のようなものです。

WITH cte AS (
  SELECT[foo], [bar], 
     row_number() OVER(PARTITION BY foo, bar ORDER BY baz) AS [rn]
  FROM TABLE
)
DELETE cte WHERE [rn] > 1

弄って見てください。

(編集: 役に立とうと、誰かが編集した ORDER BY 節があります。はっきり言って、ここでは何でも好きなもので並べることができます。実際、ここでの一般的なユースケースは、"foo, bar" がグループ識別子で、"baz" がある種のタイムスタンプであることです。最新のものを維持するためには、次のようにします。 ORDER BY baz desc )