sql >> Databasteknik >  >> RDS >> PostgreSQL

Hur tar man bort dubbletter så att endast par finns i en tabell?

Du vill ta bort valfri rad där föregående rad har samma typ. Så:

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;

var klausul kan också formuleras som:

where prev_type is distinct from type

Om du vill ta bort de "kränkande" raderna kan du göra följande -- förutsatt att tidsstämpel är unik:

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. 4 sätt att välja dubbletter av rader i PostgreSQL

  2. unionsklausul i sql

  3. Lista lagrade funktioner som refererar till en tabell i PostgreSQL

  4. Anslutningssträngsparametrar för Schema.ini