一、2条及2条以内的重复
问题
如图有两列,第一列是主键,第二列是产品编码,其中产品编码有重复数据,我现在需要删除这部分编码重复的数据
方法
利用having +聚合函数
SELECT MIN(FID) FID,FProductCode FROM #table where FDate='2022-04-20' GROUP BY FProductCode HAVING COUNT(1) > 1
查询出来的就是一半的重复数据
实现
删除重复数据
--删除重复数据 update #table set FDelete=1,exchange_status=0 where FID IN( SELECT MIN(FID) FID,FProductCode FROM #table where FDate='2022-04-20' GROUP BY FProductCode HAVING COUNT(1) > 1 )
----------------------------------------------------------------------------------
二、大于2条的重复
如图所示:这种情况下如何去重呢?
一句话概括:查找表中所有重复的数据编码,且这部分编码的主键不是最小值的那个
--1、查询所有去重后的编码 --2、查询这些去重后的编码的主键FID --即:根据单字段,删除表中该字段重复出现记录,保留最小主键ID
UPDATE MY_SP_StereoScopicStock SET FDelete=1,exchange_status=0 WHERE FDate='2022-05-30' AND FProductCode IN (SELECT FProductCode FROM MY_SP_StereoScopicStock where FDate='2022-05-30' GROUP BY FProductCode HAVING COUNT(FProductCode) > 1 ) AND FID NOT IN (SELECT MIN(FID) FROM MY_SP_StereoScopicStock where FDate='2022-05-30' GROUP BY FProductCode HAVING COUNT(FProductCode)>1)