我在 Redshift 中有一个表,其中有一些我需要以某种方式删除的重复行。我想为每个 user_id、级别和类型升级只保留一行。用户每一级只能升级一次。表格示例如下所示:
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
。我相信使用自连接表也行不通,因为没有什么独特之处可以比较?
有没有不需要我将所有唯一行复制到新表中的解决方案?谢谢!
可以试试
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