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

如何在Azure Synapse Analytics中删除指定条件的重复行?

在Azure Synapse Analytics SQL Pool中删除指定重复行

针对你需要删除audit_date = '2022-08-10'且city = 'LA'的重复行、仅保留一行的需求,由于Synapse SQL Pool不支持带CTE的DELETE语句,你可以采用以下两种可靠方法:

方法一:临时表迁移法(推荐,适用于任意数量重复行)

这种方法通过临时表筛选出需要保留的所有数据,再替换原表内容,安全且易维护:

-- 1. 创建临时表,筛选并存储需保留的数据
SELECT audit_date, city, number_of_toys, number_of_balloons, number_of_drinks
INTO #temp_retained_data
FROM (
    SELECT *,
           -- 按audit_date和city分组,给每组记录编号
           ROW_NUMBER() OVER (PARTITION BY audit_date, city ORDER BY (SELECT NULL)) AS row_num
    FROM your_table_name
) filtered_data
-- 保留每组的第一条记录,或非目标重复组的所有记录
WHERE row_num = 1 OR NOT (audit_date = '2022-08-10' AND city = 'LA');

-- 2. 清空原表(确保原表无其他需保留的关联数据,若有需谨慎操作)
TRUNCATE TABLE your_table_name;

-- 3. 将临时表数据插回原表
INSERT INTO your_table_name (audit_date, city, number_of_toys, number_of_balloons, number_of_drinks)
SELECT audit_date, city, number_of_toys, number_of_balloons, number_of_drinks
FROM #temp_retained_data;

-- 4. 清理临时表
DROP TABLE #temp_retained_data;

说明:

  • ORDER BY (SELECT NULL)表示随机选择保留哪一行,若需指定保留特定行(比如number_of_balloons最小的),可替换为ORDER BY number_of_balloons ASC。
  • 若原表有外键约束,需先禁用约束再执行TRUNCATE,操作后重新启用。

方法二:直接DELETE(仅适用于删除单条重复行)

如果仅需删除一条重复的LA记录,可直接使用TOP结合存在性判断:

DELETE TOP (1)
FROM your_table_name
WHERE audit_date = '2022-08-10' AND city = 'LA'
-- 确保该组确实存在重复行再删除
AND EXISTS (
    SELECT 1
    FROM your_table_name t
    WHERE t.audit_date = '2022-08-10' AND t.city = 'LA'
    HAVING COUNT(*) > 1
);

说明:

  • 此方法仅删除一条重复记录,若存在多条重复(超过2条),需多次执行或调整TOP数量。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 21:39:19