2014-02-08 6 views
0

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

ID   DATE 
1   01-Jan -14 05.42.23.000000000 pm 
1   01-Jan -14 05.06.17.000000000 pm 
2   01-Jan -14 05.26.16.000000000 pm 
2   01-Jan -14 05.41.20.000000000 pm 
3   01-Jan -14 05.21.19.000000000 pm 
3   01-Jan -14 05.08.18.000000000 pm 
4   01-Jan -14 05.14.17.000000000 pm 
4   01-Jan -14 05.17.17.000000000 pm 

Колонка ID имеет дубликата данные, которые нужно удалить, я хочу сохранить строки, какой столбец DATE больше.

Я пишу SQL, но результат неверен.

delete from newproducts a 
where a.id in 
     (select t.id from newproducts t group by t.id having count(*) > 1) 
    and a.date not in 
     (select max(t.date) from newproducts t group by t.id having count(*) > 1); 

как исправить? Спасибо

+1

Noooooooo! не удаляйте дубликат вопроса! Как удалить повторяющиеся «удалить дубликаты» вопросов? – tbone

ответ

1

Это работает для сервера sql;

delete a from newproducts as a 
where 
exists(
select * from newproducts b 
where a.id = b.id and a.date < b.date) 

То же или следующие должны работать на оракуле;

delete from newproducts a 
where 
exists(
select * from newproducts b 
where a.id = b.id and a.date < b.date) 
0

Попробуйте использовать exists подзапрос:

delete from newproducts np 
    where not exists (select 1 
         from newproducts np2 
         where np2.id = np.id and np2.date > np.date 
        ); 
Смежные вопросы