sql >> Databasteknik >  >> RDS >> Mysql

gruppera efter första och sista förekomsten

Du kan använda följande fråga:

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

Ovanstående fråga använder variabler för att identifiera öar med på varandra följande poster som har samma browser värde. Den returnerar en enda rad per webbläsare. Du måste upprepa samma underfråga två gånger och använda UNION om du vill skaffa två separata rader för vart och ett av min/max datum.

Demo här



  1. PostgreSQL vs Linux-kärnversioner

  2. Hur man gör en INSERT Pass-Through Query i SQL Server

  3. Entity Framework med mysql, problem med tabeller mellan linux och windows

  4. Hur man blir genomsnittlig med orderBy Desc i Laravel 5