【问题标题】:Deleting Duplicate Records in Oracle based on Maximum Date/Time根据最大日期/时间删除 Oracle 中的重复记录
【发布时间】:2011-05-10 20:13:59
【问题描述】:

我有以下带有重复信息的示例数据:

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。

谢谢。

【问题讨论】:

    标签: sql plsql oracle10g


    【解决方案1】:

    类似:

    从 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);

    【讨论】:

      【解决方案2】:

      您可以生成除具有最大日期的行以外的所有行的 ROWID(对于给定的 EMPId)并删除它们。我发现这是一种高效的方法,因为它是一种基于集合的方法并使用分析、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
      );
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-09-27
        • 2021-12-17
        • 2020-04-21
        • 1970-01-01
        • 2016-10-24
        • 2021-12-15
        • 1970-01-01
        相关资源
        最近更新 更多