SQL Сервер: удаление повторяющихся записей по величине, чем ContactID - PullRequest
0 голосов
/ 07 января 2020

Работал со следующим запросом, чтобы помочь мне перечислить и найти дубликаты в моей таблице.

SELECT TOP 100 
    a.ContactID, a.[Company Name], a.PhoneNumber, a.Status, a.State
FROM  
    Contacts a
JOIN 
    (SELECT PhoneNumber, Status, COUNT(PhoneNumber) AS totals
     FROM Contacts
     GROUP BY PhoneNumber, Status
     HAVING COUNT(PhoneNumber) > 1) b ON a.PhoneNumber = b.PhoneNumber
                                      AND a.Status = 'New'
                                      AND a.Status = b.Status
ORDER BY 
    a.PhoneNumber ASC

Это возвращает только то, что я ищу в следующем:

1365640108  MOBILTIY SHOP   2242057949  New IL
1365647384  MOBILITY SHOP   2242057949  New IL
1365640142  LIFE POINT CHILD  FAMILY    2242085228  New IL
1365647390  PROGAR MICHELLE 2242085228  New IL
1365640150  WILLIAM RYAN HOMES  2242098617  New IL
1365647393  WILLIAM RYAN HOMES  2242098617  New IL
1365640153  TRAVELHERO.COM  2242101344  New IL
1365647398  TRAVELHERO.COM  2242101344  New IL
1365645613  PFIZER INC  2242122000  New IL
1365645614  HOSPIRA WORLDWIDE INC   2242122000  New IL

Теперь я хочу удалить запись, имеющую БОЛЬШОЙ ContactID, чем другая дублирующаяся запись.

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

Мысли?

1 Ответ

2 голосов
/ 07 января 2020

Вы можете использовать row_number() и CTE. Я думаю, что это делает то, что вы хотите:

with cte as (
    select row_number() over(partition by PhoneNumber, Status order by ContactID) rn
    from contacts
    where status = 'New'
)
delete from cte where rn > 1

Запрос удаляет записи, для которых существует другая запись с такими же PhoneNumber и Status и наименьшим ContactID.

...