You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求助: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_num
  • WHERE row_num = 1:只保留每组中行号最大的那条记录,也就是每个ID的最新数据

可选操作:添加主键约束

如果需要确保新表不会再出现ID重复,可以给新表添加主键:

ALTER TABLE my_table ADD PRIMARY KEY (Id);

内容的提问来源于stack exchange,提问作者Help

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 06:17:26