PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Comment supprimer les doublons pour que seules les paires existent dans une table ?

Vous souhaitez supprimer toute ligne où la ligne précédente a le même type. Donc :

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;

Le where clause peut également être formulée comme :

where prev_type is distinct from type

Si vous souhaitez supprimer les lignes "incriminées", vous pouvez procéder comme suit :en supposant que timestamp est unique :

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;