2016-08-12 2 views
2

Ich habe eine Tabelle in Oracle 11g mit mehreren Datensätzen für verschiedene Benutzer, ich möchte überschüssige Datensätze, die älter sind, aus der Tabelle löschen und nur 5 neueste Datensätze für bestimmte halten Benutzer.Datensätze aus Orakel Tabelle löschen neuesten 5 Datensätze für alle Benutzer

Beispiel: Betrachten Sie die folgende Tabelle Screenshot mit mehreren Datensätzen für Benutzer "JACK", "ANGEL", "MACK" Ich muss nur 5 Datensätze (Zeilen) für jeden neuen Benutzer basierend auf Spalte "CREATED_ON" und lösche die älteren.

Demo Table

Kann mir jemand bieten mit einer Probe Oracle Abfrage das oben beschriebene Szenario auszuführen.

Vielen Dank im Voraus.

Antwort

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 
     ) 

gelten folgende Voraussetzungen:

  1. Tabelle wird in diesem Beispiel genannt testp.
  2. ID ist ein PK auf dem Protokoll.
Verwandte Themen