Сегментированная группа в MySQL - PullRequest
2 голосов
/ 27 января 2012

Как мне сгруппировать непрерывные данные в таблицу 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 Ответ

2 голосов
/ 27 января 2012

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

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...