2015-02-13 4 views
1

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

enter image description here

Как я могу удалить записи «Джимми» и «Kenneth», который имеет большие значения Месяц.

спасибо.

+2

Это зависит от ** базы данных **, которую вы используете, можете ли вы ** TAG ** it –

+0

Извините. Я забыл добавить его. Это Sql Server. Я отметил это. – Den

ответ

1
delete from tablename t1 where exists (select 1 from tablename t2 
             where t1.name = t2.name 
             and t1.month > t2.month) 

Но почему не учитывается год? Почему бы не использовать дату? Что делать, если два Jimmys с того же месяца? Почему нет единственного ограничения, если никакие дубликаты не разрешены?

+0

Вы правы. Год должен быть рассмотрен. Я просто попытался сделать это более ясным и простым. – Den

4

Использование CTE для удаления дубликатов записей

;with cte as 
(
select Rn=row_number()over(partition by name,post order by month ASC),* 
from yourtable 
) 
delete from cte where rn>1 
2

если месяц столбец чисел попробовать это:

DELETE table 
WHERE month = (SELECT Max(month) 
       FROM table 
       WHERE name = 'Jimmy') 
     AND name = 'Jimmy'; 

DELETE table 
WHERE month = (SELECT Max(month) 
       FROM table 
       WHERE name = 'Kenneth') 
     AND name = 'Kenneth'; 
1

Вы можете использовать более раздел для того чтобы отделить самые большие значения в месяц:

SELECT * 
FROM (SELECT *, 
       Row_number()OVER(PARTITION BY name, Post 
        ORDER BY Month DESC) AS RowNumber 
     FROM TABLE) 
WHERE rownumber = 1 
0

Используйте этот код ..

WITH tblTemp as(SELECT ROW_NUMBER() Over(PARTITION BY Name,Post ORDER BY Name)As RowNumber,* FROM <table_name>)DELETE FROM tblTemp where RowNumber >1