sql >> Databáze >  >> RDS >> PostgreSQL

Sloučit souvislé řádky pomocí Postgresql

Zde je jeden způsob řešení tohoto problému. Vytvořte příznak, který určí, zda jeden záznam ne překrývají s předchozím. Toto je začátek skupiny. Pak vezměte kumulativní součet tohoto příznaku a použijte jej pro seskupení:

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;

Zde je SQL Fiddle.



  1. Automaticky zvýšit primární klíč v SQL Server Management Studio 2012

  2. Týden v roce pro týdny začínající sobotou

  3. pokud řádek1 =hodnota 1, aktualizujte další řádky

  4. Moje oblíbená rozšíření PostgreSQL - část druhá