PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Como remover duplicatas para que apenas pares existam em uma tabela?


Você deseja remover qualquer linha em que a linha anterior tenha o mesmo tipo. Então:
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;

O where cláusula também pode ser formulada como:
where prev_type is distinct from type

Se você deseja excluir as linhas "ofendidas", você pode fazer o seguinte -- assumindo que timestamp é único:
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;