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

raggruppare per prima e ultima occorrenza

Puoi utilizzare la seguente query:

SELECT MIN(current_day) AS start_day, 
       MAX(current_day) AS stop_day, 
       browser
FROM (
   SELECT current_day, browser,
          @grp := IF(@br = browser, @grp,
                     IF(@br := browser, @grp+1, @grp+1)) AS grp
   FROM mytable 
   CROSS JOIN (SELECT @grp := 0, @br := '') AS vars
   ORDER BY current_day) AS t
GROUP BY browser, grp

La query precedente utilizza variabili, al fine di identificare isole di record consecutivi aventi lo stesso browser valore. Restituisce una singola riga per browser. Devi ripetere la stessa sottoquery due volte e utilizzare UNION se vuoi prenderne due righe separate per ciascuna delle date min/max.

Dimostrazione qui