sql >> Database teknologi >  >> RDS >> Mysql

MySQL Group fra kvartaler til perioder

Dette er et problem med huller og øer. Du kan løse det med vinduesfunktioner (kun tilgængelig i 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)

Ideen er at bygge grupper af tilstødende poster ved hjælp af en kumulativ sum:hver gang der er et mellemrum, der ikke er 15 minutter, stiger summen.



  1. Sådan drager du fordel af de nye partitioneringsfunktioner i PostgreSQL 11

  2. MySQL Workbench - Sådan synkroniseres EER-diagrammet

  3. MySQL Workbench Tutorial – En omfattende guide til RDBMS-værktøjet

  4. MySQL-streng til DATO/TID eller TIDSSTYKKE