我有以下包含重复信息的示例数据:
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。
类似:
从没有名称的表中删除 WHERE date_column != (SELECT MAX(t2.date_column) 来自 the_table_with_no_name t2 WHERE t2.id = the_table_with_no_name.id);
您可以生成除最大日期行(对于给定的 EMPId)之外的所有行的 ROWID 并删除它们。我发现这是一种高性能的方法,因为它是一种基于集合的方法并使用分析、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
);