sql >> Database >  >> RDS >> PostgreSQL

Hoe duplicaten te verwijderen zodat er alleen paren in een tabel voorkomen?

U wilt elke rij verwijderen waarvan de vorige rij hetzelfde type heeft. Dus:

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;

De where clausule kan ook worden geformuleerd als:

where prev_type is distinct from type

Als u de "aanstootgevende" rijen wilt verwijderen, kunt u het volgende doen -- ervan uitgaande dat timestamp is uniek:

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;


  1. Paginatitel wijzigen op basis van item in Oracle APEX 4.0

  2. Zoekrelevantie in volledige tekst wordt gemeten in?

  3. MySQL-hosting op Azure, volledig beheerde clouddatabaseservice wordt gelanceerd op ScaleGrid

  4. Hoe PostgreSQL 12 op Fedora 33 te installeren