2012-01-27 2 views
2

Как я могу сгруппировать непрерывный данные в таблице MySQL и сохранить его номер в дополнительном столбце?Сегментированная группа в MySQL

Например:

id, n 

1 10 
2 10 
3 10 
4 56 
5 10 
6 10 
7 80 
8 12 

Я хочу, чтобы получить что-то вроде этого. Обратите внимание, что n из 10 перечислено дважды.

id n cnt 
1 10 3 
4 56 1 
5 10 2 
7 80 1 
8 12 1 

Это ли способ сделать это без функции?

+1

Может быть, если вы объяснили, почему вы хотите сделать это, было бы помочь нам. – user606723

ответ

2

Вы можете с использованием MySQL переменных

select 
     min(PreQuery.ID) as StartIDOfGroup, 
     PreQuery.n, 
     count(*) as Cnt 
    from 
     (select yt.id, 
       yt.n, 
       @CommonGroup := @CommonGroup + if(@LastNValue = yt.n, 0, 1) as Common, 
       @LastNValue := yt.n as JustAPlaceholder 
      from 
       YourTable yt, 
       (select @CommonGroup := 0, @LastNValue := 0) SQLVars) PreQuery 
    group by 
     PreQuery.n, 
     PreQuery.Common 
    order by 
     StartIDOfGroup 
+0

прохладный! Большое вам спасибо, это именно то, что мне нужно! – Epsiloncool

Смежные вопросы