Mysql
 sql >> Datenbank >  >> RDS >> Mysql

nach erstem und letztem Vorkommen gruppieren

Sie können die folgende Abfrage verwenden:

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

Die obige Abfrage verwendet Variablen, um Inseln aufeinanderfolgender Datensätze mit demselben browser zu identifizieren Wert. Es gibt eine einzelne Zeile pro Browser zurück. Sie müssen dieselbe Unterabfrage zweimal wiederholen und UNION verwenden wenn Sie zwei bekommen möchten separate Zeilen für jedes der min./max. Daten.

Demo hier