sql >> Database >  >> RDS >> Mysql

Groepen opeenvolgende records selecteren met een gemeenschappelijk attribuut?

Zou je dit kunnen proberen? Je kunt hier testen 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;

Het belangrijkste idee is het genereren van dezelfde seq voor dezelfde opeenvolgende groep als volgt.

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

dan tenslotte groeperen GROUP BY grp, seq die elke opeenvolgende groep kan onderscheiden, zelfs als ze dezelfde grp . hebben .

EDIT:Om precies het resultaat in het voorbeeld te krijgen:

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. Django-queryset-objecten retourneren Geen in plaats van 0, ook al heeft de database 0 als veldwaarde opgeslagen

  2. MySQL:het converteren van MyISAM naar InnoDB maakt queries sneller...?

  3. Waarom retourneert MySQL sommige floats in wetenschappelijke notatie, maar andere niet?

  4. Kan geen verbinding maken met MYSQL vanuit Docker-instantie