2016-09-19 6 views
2

У меня есть табличный тест, содержащий данные следующим образом, и я хочу удалить trsid 124, и у меня есть миллионы записей в моей базе данных, это просто сценарий. Концепция является удаление дубликатов запись из таблицыНужно удалить повторяющиеся записи из таблицы using row_number()

-------------------------------------------- 
TrsId | ID | Name | 
--------------------------------------------  
123  | 1 | ABC  | 
124  | 1 | ABC  | 

Я пытаюсь что-то вроде

delete from test 
select T.* from 
(
    select ROW_NUMBER() over (partition by ID order by name) as r, 
      Trsid, 
      ID, 
      name 
    from test 
) t 
where r = 2 

Даже если я обновлю запрос, который хорошо для меня

update test set id=NULL 
select T.* from 
(
    select ROW_NUMBER() over (partition by ID order by name) as r, 
      Trsid, 
      ID, 
      name 
    from test 
) t 
where r = 2 

Но если я запустите оба этого запроса, он удалит все записи из теста таблицы. И если я обновляю его, обновляем обе записи. я не знаю, что я делаю неправильно здесь

ответ

2
WITH cte AS 
(
    SELECT ROW_NUMBER() OVER(PARTITION by ID ORDER BY name) AS Row 
    FROM test 
) 

DELETE FROM cte 
WHERE Row > 1 
+1

Thanx Тим работает !!!!!!!! –

0

Используйте приведенный ниже запрос.

 ;WITH cte_1 
     AS (SELECT ROW_NUMBER() OVER(PARTITION BY ID,NAME ORDER BY TrsId) Rno,* 
       FROM YourTable) 
     DELETE 
     FROM cte_1 
     WHERE RNO>1 
-2

Чтобы найти повторяющиеся записи, мы можем написать, как показано ниже запроса,

;WITH dup_val 
    AS (SELECT a, 
       b, 
       Row_number() 
        OVER( 
        partition BY a, b 
        ORDER BY b, NAME)AS [RANK] 
     FROM table_name) 
SELECT * 
FROM dup_val 
WHERE [rank] <> 1; 
+0

Почему вы отвечаете на годовой вопрос с тем же точным ответом, что и принятый ответ? – KinSlayerUY

 Смежные вопросы

  • Нет связанных вопросов^_^