需要帮助删除Amazon Redshift DB中的重复行

时间:2016-05-10 22:44:48

标签: sql duplicates amazon rows

我在Redshift中有一个表,它有一些重复的行,我需要以某种方式删除。我想为每个user_id,级别和类型levelup只保留一行。用户每级只能升级一次。该表的示例如下所示:

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

我已尝试查找适用于其他数据库的查询,但未找到任何可与Redshift配合使用的查询。使用TOPmin(timestamp),即使我知道有多少重复内容,我也无法使用LIMIT。我相信使用自联接表也无法工作,因为没有什么可比较的独特之处?

是否有任何解决方案不要求我将所有唯一行复制到新表中?谢谢!

1 个答案:

答案 0 :(得分: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