Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Grupa MySQL od kwartałów do okresów

To jest problem luk i wysp. Możesz to rozwiązać za pomocą funkcji okna (dostępne tylko w 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)

Pomysł polega na zbudowaniu grup sąsiednich rekordów przy użyciu sumy skumulowanej:za każdym razem, gdy pojawia się przerwa, która nie przekracza 15 minut, suma wzrasta.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Dynamiczny pivot MySQL

  2. Laravel 5 Eloquent HasManyThrough - nazwy kolumn w linkach

  3. Importowanie za pomocą MySQL WorkBench... błąd BŁĄD 1046 (3D000)

  4. usuń używając where i lub

  5. Konwersja ciągu na typ mySql DECIMAL