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

Hợp nhất các hàng liên tục với Postgresql

Đây là một phương pháp để giải quyết vấn đề này. Tạo cờ xác định xem một bản ghi có không trùng lặp với cái trước. Đây là sự khởi đầu của một nhóm. Sau đó, lấy tổng tích lũy của cờ này và sử dụng cờ đó để nhóm:

select user_id, min(begin_at) as begin_at, max(end_at) as end_at
from (select s.*, sum(startflag) over (partition by user_id order by begin_at) as grp
      from (select s.*,
                   (case when lag(end_at) over (partition by user_id order by begin_at) >= begin_at
                         then 0 else 1
                    end) as startflag
            from slots s
           ) s
     ) s
group by user_id, grp;

Tại đây là một SQL Fiddle.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Lỗi mã hóa với sqlalchemy và postgresql

  2. Postgres - Lỗi trả về khi cập nhật nếu không tìm thấy bản ghi

  3. Hàm kích hoạt PostgreSQL 9.3 để chèn vào bảng với tên được tham số hóa

  4. Làm thế nào để đếm tất cả các lần xuất hiện kết hợp trong SQL?

  5. Kiểm tra nhanh nhất nếu hàng tồn tại trong PostgreSQL