2016-05-10 8 views
0

Redshiftにテーブルがあり、何とか削除する必要がある重複した行があります。私は各user_id、レベル、およびタイプレベルアップに対して1つの行だけを残したいと思う。ユーザーはレベルごとに1つのレベルを上げることしかできません。テーブルの例は次のようになります。Amazon Redshift DBの重複行を削除する手助けが必要

version date  timestamp   user_id level type 
1.0.0 2016-05-10 2016-05-10 14:53:58 1234  13  levelup 
1.0.0 2016-05-10 2016-05-10 14:53:25 1234  13  levelup 
1.0.0 2016-05-10 2016-05-10 14:52:03 1234  13  levelup 
1.0.0 2016-05-10 2016-05-10 14:52:03 1234  13  levelup 
1.0.0 2016-05-10 2016-05-10 14:52:03 1234  13  levelup 

私は、他のデータベースのために働くが、赤方偏移で動作することは何も見つかっていないクエリに探してみました。 TOPまたはmin(timestamp)を使用して、何個の重複があるか分かっていても、LIMITを使用することはできません。私は、自己結合テーブルを使用すると、何もユニークな比較ができないので、どちらもうまくいかないと思いますか?

すべてのユニークな行を新しいテーブルにコピーする必要はありませんか?ありがとう!

答えて

0

row_number()機能を試すことができますか?

さらに、一意のID列を作成し、このIDを持つすべての行にデータを取り込むことができます。

DELETE FROM tablename 
WHERE id IN (SELECT id 
       FROM (SELECT id, 
          ROW_NUMBER() OVER (partition BY user_id,level,type ORDER BY timestamp) AS rnum 
        FROM tablename) t 
       WHERE t.rnum > 1); 

http://docs.aws.amazon.com/redshift/latest/dg/r_Examples_of_WF_ROW_NUMBER_WF.html

+0

これは、すべての行をバック返すように見えましたか?私は正しい行をターゲットとするまでデータを削除するのに疲れているので、最初に「SELECT」を実行しました。しかし、私はこれが行1に割り当てられた1つを除くすべてのものを対象とすることになっているのを見ていますが、そのようには見えませんでした。 – eriye9

+0

こんにちは、私は、クエリを変更しました。 select文を再度試すことができますか?これを動作させるには、idカラムを作成する必要があります。一意のIDを持つようにテーブルを変更できますか? –

+0

残念ながら、私はこのテーブルに列を追加できません。ユニークなIDを持たないことは、私が直面している問題です。 – eriye9

関連する問題