If you have a table like this...
ID NAME AGE BIRTHDATE
----------- ---------- ----------- ----------
1 venkat 30 05/10/1971
2 ve 30 05/10/1970
1 venkat 25 05/10/1975
3 vetest 29 05/10/1969
...here's how to delete duplicate entries while keeping the newest entry row. First, create a view over the table (this is needed because DELETE cannot range over a query):
CREATE VIEW temp(rn) AS SELECT rownumber() OVER (PARTITION BY id ORDER BY birthdate DESC)
FROM test;
Now delete the duplicates:
DELETE FROM temp WHERE rn > 1;
Now check the output:
select * from test order by id;
ID NAME AGE BIRTHDATE
----------- ---------- ----------- ----------
1 venkat 25 05/10/1975
2 ve 30 05/10/1970
3 vetest 29 05/10/1969
3 record(s) selected.
For More Information
- The Best DB2 Web Links: tips, tutorials, scripts, and more.
- Have a database design tip to offer your fellow DBA's? The best tips submitted will receive a cool prize--submit your tip today!
- Ask your technical DB2 questions--or help out your peers by answering them--in our live discussion forums.
- Check out our Ask the Experts feature: Our gurus are waiting to answer your toughest questions.
This was first published in December 2001