Как удалить дубликаты записей с SQL Server? - PullRequest
2 голосов
/ 05 апреля 2019

У меня есть таблица с записями, и я хочу удалить все дублирующиеся записи. Имя, возраст, дата - это столбцы, которые я получаю из файла.

  • CREATE_DATE - это столбец, который фиксируется, когда язагружен файл.
  • file_id из идентификатора, который я генерирую на основе таблицы file_log_sys
  • stage_id - столбец идентификаторов

Примерданные:

stage_id name age       date         file_id  create_date
---------------------------------------------------------
   1     john   25     2019-02-02    100       2019-04-04
   2     sam    50     2019-01-13    100       2019-04-04
   3     john   25     2019-02-02    101       2019-04-05   
   4     peter  33     2019-01-01    101       2019-04-05

Я хотел бы удалить запись, где file_id = 100 и stage_id = 1 и name = john

Я пытался:

delete min(file) id 
from table 

и этоне работает.

Я хочу, чтобы мой вывод был

stage_id name   age    date        file_id     create_date
-----------------------------------------------------------
   2     sam    50     2019-01-13    100       2019-04-04
   3     john   25     2019-02-02    101       2019-04-05   
   4     peter  33     2019-01-01    101       2019-04-05

Не могли бы вы помочь мне с запросом?

Заранее спасибо.

Ответы [ 3 ]

3 голосов
/ 05 апреля 2019

использование row_number()

with cte as
(
    select *,row_number() over(partition by name order by create_Date desc) as rn
    from tablename
)

delete from cte where rn<>1
0 голосов
/ 05 апреля 2019

Использование RowNumber ()

WITH TablesCTE AS
(
   SELECT *, ROW_NUMBER()OVER(PARTITION BY file_id ORDER BY file_id  ) AS RowNumber
   FROM TableName
)
DELETE FROM TablesCTE WHERE RowNumber > 1

Альтернативный способ

DELETE FROM TableName WHERE file_id  NOT IN (SELECT MIN(file_id ) _
    FROM TableName  GROUP BY stage_id,name,age,date) 
0 голосов
/ 05 апреля 2019

Не уверен, что я полностью понимаю ваш вопрос, но если вы просто хотите удалить запись, где file_id = 100 и stage_id = 1 и name = john, это так просто, как:

delete from your_table where file_id = 100 and stage_id = 1 and name = 'john';
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...