Mysql
 sql >> Base de données >  >> RDS >> Mysql

regrouper par première et dernière occurrence

Vous pouvez utiliser la requête suivante :

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 requête ci-dessus utilise des variables, afin d'identifier des îlots d'enregistrements consécutifs ayant le même browser valeur. Il renvoie une seule ligne par navigateur. Vous devez répéter la même sous-requête deux fois et utiliser UNION si vous voulez en obtenir deux des lignes distinctes pour chacune des dates min/max.

Démo ici