从返回重复记录的组sql中选择一个ID?

时间:2019-06-04 06:17:53

标签: sql sql-server

我只能从以下SQL中选择CompanyId列;

select CompanyId,
           row_number() over (partition by [GradeName] order by [TankNumber] ) rn
    from [Data_DB].[dbo].[Company]  where CompanyCode='ASAAA'

在SQL中,我尝试找出重复的记录,然后从另一个表中,根据上述查询中的CompanyId删除一些记录。

即;

delete from [[dbo].ObservationData 
where CompanyId in (select CompanyId,
               row_number() over (partition by [GradeName] order by [TankNumber] ) rn
        from [Data_DB].[dbo].[Company]  where CompanyCode='ASAAA')

如何修改以上查询?

2 个答案:

答案 0 :(得分:3)

假设您不在乎保留或删除哪些重复项,则可以尝试在此处使用可删除的CTE:

WITH cte AS (
    SELECT *,
       ROW_NUMBER() OVER (PARTITION BY [GradeName] ORDER BY [TankNumber]) rn
    FROM [Data_DB].[dbo].[Company]
    WHERE CompanyCode = 'ASAAA'
)

DELETE
FROM cte
WHERE rn > 1;

此答案任意保留“第一个”重复项,第一个定义为具有最早行号的记录。

答案 1 :(得分:0)

delete from [[dbo].ObservationData 
where CompanyId in (select CompanyId from (select CompanyId,
               row_number() over (partition by [GradeName] order by [TankNumber] ) rn
        from [Datat_DB].[dbo].[Company]  where CompanyCode='ASAAA') a where rn > 1 ;