sql >> Database teknologi >  >> RDS >> PostgreSQL

Flet kontinuerlige rækker med Postgresql

Her er en metode til at løse dette problem. Opret et flag, der bestemmer, om en enkelt post ikke gør overlapper med den forrige. Dette er starten på en gruppe. Tag derefter den kumulative sum af dette flag og brug det til at gruppere:

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;

Her er en SQL Fiddle.



  1. python mysqldb slette række

  2. django test app fejl - Der opstod en fejl ved oprettelse af testdatabasen:tilladelse nægtet til at oprette database

  3. xampp MySQL starter ikke

  4. Tilfældigt tal i MySQL-kolonnen