PostgreSQL
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> PostgreSQL

Làm thế nào để loại bỏ các bản sao để chỉ có các cặp tồn tại trong một bảng?

Bạn muốn loại bỏ bất kỳ hàng nào mà hàng trước đó có cùng loại. Vì vậy:

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 mệnh đề cũng có thể được diễn giải như sau:

where prev_type is distinct from type

Nếu bạn muốn xóa các hàng "vi phạm", bạn có thể làm như sau - giả sử rằng timestamp là duy nhất:

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. libpq:Cách lấy mã lỗi sau khi kết nối PGconn không thành công

  2. Cách tạo API đồ thị không máy chủ cho MySQL, Postgres và Aurora

  3. PostgreSQL thay đổi thứ tự các hàng đã trả về

  4. Làm cách nào để kết nối R với PostgreSQL trên OSX 10.10.2?

  5. PostgreSQL 9.1 sử dụng đối chiếu trong các câu lệnh chọn