求助:Amazon Redshift中创建无重复ID且保留最新数据的SQL查询
解决Amazon Redshift中按原始行号保留唯一ID最新数据的问题
要处理重复ID并保留每个ID对应的最新数据(按原始插入顺序的最后一条记录),你可以用Redshift的窗口函数ROW_NUMBER()实现,替代之前只能去全列重复的脚本。
具体SQL脚本
-- 重命名原表为旧表,避免数据丢失 ALTER TABLE my_table RENAME TO my_table_old; -- 创建去重后的新表,保留每个ID的最新记录 CREATE TABLE my_table AS SELECT Id, name, visited, column1, column2 FROM ( SELECT *, -- 按ID分组,按数据物理存储顺序(原始插入顺序)分配行号 ROW_NUMBER() OVER (PARTITION BY Id ORDER BY (SELECT NULL)) AS row_num FROM my_table_old ) t WHERE row_num = 1; -- 筛选每组中行号最大的记录(即最新插入的那条) -- 确认新表数据无误后,删除旧表 DROP TABLE IF EXISTS my_table_old CASCADE;
关键逻辑说明
PARTITION BY Id:将数据按ID分组,每个ID为一组ORDER BY (SELECT NULL):让窗口函数按照Redshift中数据的物理存储顺序分配行号,这对应你所说的“原始顺序”,最后插入的重复ID记录会获得最大的row_numWHERE row_num = 1:只保留每组中行号最大的那条记录,也就是每个ID的最新数据
可选操作:添加主键约束
如果需要确保新表不会再出现ID重复,可以给新表添加主键:
ALTER TABLE my_table ADD PRIMARY KEY (Id);
内容的提问来源于stack exchange,提问作者Help
相关产品推荐
相关产品推荐

