我在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配合使用的查询。使用TOP
或min(timestamp)
,即使我知道有多少重复内容,我也无法使用LIMIT
。我相信使用自联接表也无法工作,因为没有什么可比较的独特之处?
是否有任何解决方案不要求我将所有唯一行复制到新表中?谢谢!
答案 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