Oracle
 sql >> база данни >  >> RDS >> Oracle

Изтрийте дублиращи се редове в Oracle SQL, оставяйки най-новите записи

Ето един подход, използващ идентификаторите на редовете:

delete from transaction
where 
    last_update = date '2020-03-01'
    and rowid in (
        select rid
        from (
            select 
                rowid rid, 
                row_number() over(partition by par_num ,tran_num order by last_update desc) rn
            from transaction                
        ) t
        where rn > 1
    )

Подзаявката генерира списък с идентификатори на редове за редове, които не са най-новите в своята група (т.е. всички записи, имащи един и същ par_num ,tran_num ) - най-новият запис за група се идентифицира с помощта на row_number() . Външната заявка просто изтрива тези редове.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как мога да предам параметрите си за получаване и задаване на клас на връзка?

  2. вмъкване на множество редове в Oracle SQL

  3. PL/SQL разработчик как да получи реда, който е направил вмъкването неуспешно?

  4. JDBC драйвер за Oracle 10G XE

  5. SQL грешка:ORA-00933:SQL командата не е приключила правилно