sql >> Databasteknik >  >> RDS >> Mysql

MySQL Group från kvartal till perioder

Detta är ett problem med luckor och öar. Du kan lösa det med fönsterfunktioner (endast tillgängligt 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)

Tanken är att bygga grupper av angränsande poster med en kumulativ summa:varje gång det finns ett mellanrum som inte är 15 minuter, ökar summan.



  1. Optimerar min mysql-fråga för att använda index för sortering

  2. Det kan bara finnas en automatisk kolumn

  3. Hur kan jag göra en INNAN UPPDATERAD trigger med sql-server?

  4. LPAD med inledande nolla