PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Wie entferne ich Duplikate, sodass nur Paare in einer Tabelle vorhanden sind?

Sie möchten jede Zeile entfernen, in der die vorherige Zeile den gleichen Typ hat. Also:

select timestamp, type
from (select t.*,
             lag(type) over (order by timestamp) as prev_type
      from ticket_events t
     ) t
where prev_type <> type or prev_type is null;

Das where Klausel kann auch wie folgt formuliert werden:

where prev_type is distinct from type

Wenn Sie die "anstößigen" Zeilen löschen möchten, können Sie Folgendes tun - vorausgesetzt, dass timestamp ist einzigartig:

delete from ticket_events
    using (select t.*,
                  lag(type) over (order by timestamp) as prev_type
           from ticket_events t
          ) tt
    where tt.timestamp = t.timestamp and
          tt.prev_type = t.type;