我有以下具有重复信息的示例数据:
ID Date Emp_ID Name Keep
---------------------------------------------------------
1 17/11/2010 13:45:22 101 AB *
2 17/11/2010 13:44:10 101 AB
3 17/11/2010 12:45:22 102 SF *
4 17/11/2010 12:44:10 102 SF
5 17/11/2010 11:45:22 103 RD *
6 17/11/2010 11:44:10 103 RD
根据上述数据集,如何删除重复的Emp ID并仅保留指定了最大日期/时间的Emp ID?
基于以上所述,我只会看到ID:1,3和5。
感谢。
答案 0 :(得分:4)
类似的东西:
DELETE FROM the_table_with_no_name WHERE date_column != (SELECT MAX(t2.date_column) FROM the_table_with_no_name t2 WHERE t2.id = the_table_with_no_name.id);
答案 1 :(得分:1)
您可以生成除最大日期之外的所有行的ROWID(对于给定的EMPIds)并删除它们。我发现这是一种高性能,因为它是一种基于集合的方法,并使用分析,rowID。
--get list of all the rows to be deleted.
select row_id from (
select rowid row_id,
row_number() over (partition by emp_id order by date desc) rn
from <table_name>
) where rn <> 1
然后删除行。
delete from table_name where rowid in (
select row_id from (
select rowid row_id,
row_number() over (partition by emp_id order by date desc) rn
from <table_name>
) where rn <> 1
);