Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Grupuj MySQL według kolejnych wystąpień

Pod warunkiem, że Twój stół wygląda tak :

"id";"year";"team"
"1";"2000";"AAA"
"2";"2001";"CCC"
"3";"2002";"CCC"
"4";"2003";"BBB"
"5";"2004";"AAA"
"6";"2005";"AAA"
"7";"2006";"AAA"

To zapytanie powinno wystarczyć :

SELECT a.year AS start
     , MIN(c.year) AS end
     , MIN(c.year)-a.year+1 AS total
     , CONCAT_WS('-', a.year, IF(a.year = min(c.year), NULL, min(c.year))) as start_end
     , a.team
  FROM 
     ( SELECT x.year, x.team, COUNT(*) id
         FROM results x
         JOIN results y
           ON y.year <= x.year
        GROUP BY x.id
     ) AS a
  LEFT JOIN 
     ( SELECT x.year, x.team, COUNT(*) id 
         FROM results x
         JOIN results y
           ON y.year <= x.year
        GROUP BY x.id
     ) AS b ON a.id = b.id + 1 AND b.team = a.team
  LEFT JOIN  
     ( SELECT x.year, x.team, COUNT(*) id 
         FROM results x
         JOIN results y
           ON y.year <= x.year
        GROUP BY x.id
     ) AS c ON a.id <= c.id AND c.team = a.team
  LEFT JOIN 
     ( SELECT x.year, x.team, COUNT(*) id 
         FROM results x
         JOIN results y
           ON y.year <= x.year
        GROUP BY x.id
     ) AS d ON c.id = d.id - 1 AND d.team = c.team
WHERE b.id IS NULL AND c.id IS NOT NULL AND d.id IS NULL
GROUP BY start;

BTW Możesz znaleźć Wspólne drzewo zapytań przydatne do rozwiązania tych problemów (sprawdź odpowiedzi dla "Znajdź poprzednie i następne wartości w sekwencji") :s.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Tabela [nazwa tabeli] nie jest zablokowana

  2. Importowanie pliku CSV do MySQL z innym formatem daty

  3. Ustawienia serwera WWW i bazy danych, aby uzyskać prawidłową strefę czasową UTC

  4. Zapytanie SQL do utworzenia tabeli w MySQL

  5. Czy istnieje lepszy sposób na przetworzenie danych z pliku tekstowego o długości 300 000 wierszy i wstawienie ich do MySQL?