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

Vybíráte skupiny po sobě jdoucích záznamů se společným atributem?

Mohl bys to zkusit? Testovat můžete zde 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;

Klíčovou myšlenkou je vygenerovat stejné seq pro stejnou po sobě jdoucí skupinu následovně.

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

pak konečně seskupení GROUP BY grp, seq což může odlišit jednotlivé po sobě jdoucí skupiny, i když mají stejné grp .

EDIT:Chcete-li získat přesný výsledek v příkladu:

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. ORACLE SQL:Získejte všechna celá čísla mezi dvěma čísly

  2. Jak spustit PHP skript v naplánovanou dobu

  3. Formátování DATE v oracle

  4. Vkládání proměnných MySQL do Google map pomocí PHP