sql >> Database >  >> RDS >> Mysql

MySQL Group van kwartalen naar periodes

Dit is een hiaten en eilanden probleem. Je kunt het oplossen met vensterfuncties (alleen beschikbaar in MySQL 8.0):

select 
    person,
    min(act_date) start_date,
    max(act_date) end_date
from (
    select
        t.*,
        sum(act_date <> lag_act_date + interval 15 minute)
            over(partition by person order by act_date) grp
    from (
        select 
            t.*,
            lag(act_date) 
                over(partition by person order by act_date) lag_act_date
        from mytable t
    ) t
) t
group by person, grp
order by min(act_date)

Het idee is om groepen aangrenzende records op te bouwen met behulp van een cumulatieve som:elke keer dat er een gat is dat niet 15 minuten is, wordt de som verhoogd.



  1. Hoe opmerkingen toevoegen in SQL?

  2. Voeg een enkele rij toe vanuit een tabel in MySQL

  3. Een Excel-document maken vanuit een Java-programma met behulp van Apache POI

  4. MySQL Cross-Table Count(*) Query Help