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

Обединяване на непрекъснати редове с Postgresql

Ето един метод за решаване на този проблем. Създайте флаг, който определя дали един запис не припокриване с предишния. Това е началото на група. След това вземете кумулативната сума на този флаг и я използвайте за групиране:

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;

Тук е 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. Как да премахна или създам база данни от clojure.java.jdbc?

  2. Сравнителен анализ, управлявани PostgreSQL облачни решения:Част втора – Amazon RDS

  3. Първични ключове за препращане към външни ключове на POSTGRESQL на две различни таблици

  4. Множество нежелани записи в група по клауза в Postgress

  5. как да използвате jsonb в rails