PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Как да премахнете дубликати, така че в таблица да съществуват само двойки?

Искате да премахнете всеки ред, където предишният ред има същия тип. И така:

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;

where клаузата може също да бъде формулирана като:

where prev_type is distinct from type

Ако искате да изтриете „проблемните“ редове, можете да направите следното -- ако приемем, че timestamp е уникален:

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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да декодирате журналите за грешки на PostgreSQL

  2. SQL сравнение на равенство/неравенство със стойности с nullable

  3. node-postgres $1 IS NULL грешка

  4. postgresql nextval въпрос за последователности

  5. Как да импортирате *огромни* части от данни в PostgreSQL?