Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

agrupar por primeira e última ocorrência


Você pode usar a seguinte consulta:
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

A consulta acima usa variáveis, para identificar ilhas de registros consecutivos com o mesmo browser valor. Ele retorna uma única linha por navegador. Você deve repetir a mesma subconsulta duas vezes e usar UNION se você quiser obter dois linhas separadas para cada uma das datas min/max.

Demonstração aqui