sql >> Databáze >  >> RDS >> Mysql

MySQL Group od čtvrtletí do období

To je problém mezer a ostrovů. Můžete to vyřešit pomocí okenních funkcí (dostupných pouze v 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)

Cílem je vytvořit skupiny sousedních záznamů pomocí kumulativního součtu:pokaždé, když je mezera, která není 15 minut, součet se zvýší.



  1. Jak Asind() funguje v PostgreSQL

  2. Jaký je nejlepší způsob implementace tabulky fronty zpráv v mysql

  3. MySQL EXPLAIN:Použití indexu vs. Použití podmínky indexu

  4. ORA-01097