Выберите идентификатор из группы SQL, которая возвращает дубликаты записей? - PullRequest
1 голос
/ 04 июня 2019

Я должен выбрать CompanyId столбец только из следующего SQL;

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 ]

3 голосов
/ 04 июня 2019

Если вам все равно, какой дубликат будет сохранен или удален, вы можете попробовать использовать удаляемый 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;

В этом ответе произвольно сохраняется «первый» дубликат, причем первый определяется как запись с самым ранним номером строки.

0 голосов
/ 04 июня 2019
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 ;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...