2016-08-12 59 views
2

我有一个在Oracle 11g中有不同用户的多个记录的表,我想从表中删除多余的记录,并且只保留5个最新的记录用户。请考虑下面的表格截图,其中包含用户“JACK”,“ANGEL”,“MACK”的多个记录我必须为每个基于列“CREATED_ON”的新用户保留5条记录(行)并删除旧的。从oracle表中删除记录保留所有用户的最新5条记录

Demo Table

谁能给我提供一个样本Oracle查询执行上面的场景。

在此先感谢。

回答

3
delete from testp 
     where id in 
     ( select id 
      from 
      ( 
        select id, row_number() over ( 
          partition by name order by created_on desc) rn 
        from testp) 
       where rn > 5 
     ) 

假设:

  1. 表在此示例中称为testp。
  2. ID是记录中的PK。