Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Gruppen von aufeinanderfolgenden Datensätzen mit einem gemeinsamen Attribut auswählen?

Könnten Sie das versuchen? Sie können hier http://www.sqlfiddle.com/#!2/57967 testen /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;

Die Schlüsselidee ist, dieselbe seq zu generieren für dieselbe aufeinanderfolgende Gruppe wie folgt.

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

dann gruppieren Sie schließlich GROUP BY grp, seq die jede aufeinanderfolgende Gruppe unterscheiden können, selbst wenn sie denselben grp haben .

EDIT:Um genau das Ergebnis im Beispiel zu erhalten:

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