sql >> Databáze >  >> RDS >> Mysql

seskupit podle prvního a posledního výskytu

Můžete použít následující dotaz:

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

Výše uvedený dotaz používá proměnné k identifikaci ostrovů po sobě jdoucích záznamů, které mají stejný browser hodnota. Vrátí jeden řádek na prohlížeč. Musíte dvakrát zopakovat stejný dílčí dotaz a použít UNION pokud chcete získat dva samostatné řádky pro každé z minimálních/maximálních dat.

Ukázka zde



  1. Oracle Wait Events, které by měl znát každý

  2. Kdy použít EXCEPT na rozdíl od NOT EXISTS v Transact SQL?

  3. Laravel 5:synchronizace dalšího pole přes pivot

  4. Python psycopg2 se nevkládá do tabulky postgresql