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

Wybieranie grup kolejnych rekordów o wspólnym atrybucie?

Czy możesz tego spróbować? Możesz przetestować tutaj http://www.sqlfiddle.com/#!2/57967 /12 .

Select grp_new, group_concat(ord)
From (
   Select ord, if(grp = @prev, @seq, @seq := @seq + 1) as seq,
    if(grp = @prev, grp, @prev := grp) as grp_new
  From tab, (SELECT @seq := 0, @prev := '') AS init
  Order by ord
) x
Group by grp_new, seq;

Kluczową ideą jest wygenerowanie tego samego seq dla tej samej kolejnej grupy w następujący sposób.

Select
   ord, if(grp = @prev, @seq, @seq := @seq + 1) as seq,
    if(grp = @prev, grp, @prev := grp) as grp_new
From tab, (SELECT @seq := 0, @prev := '') AS init
Order by ord

następnie wreszcie grupuje GROUP BY grp, seq które mogą rozróżniać poszczególne grupy, nawet jeśli mają ten sam grp .

EDYCJA:Aby uzyskać dokładny wynik w przykładzie:

Select grp_new, group_concat(ord order by ord)
From (
  Select ord, if(grp = @prev, @seq, @seq := @seq + 1) as seq,
    if(grp = @prev, grp, @prev := grp) as grp_new
  From tab, (SELECT @seq := 0, @prev := '') AS init
  Order by ord
) x
Group by seq


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jaki jest odpowiednik DATALENGTH() w MySQL?

  2. Replikacja z MySQL do MS SQL

  3. Problemy z instrukcją Select w MySQL i Pythonie

  4. DECIMAL mysql i przestrzeń dyskowa?

  5. Jak usunąć duplikaty z tabeli MySQL?