选择连续记录的数量

时间:2012-02-07 11:03:59

标签: mysql

我正在尝试获取每个子序列的行数。

初始表可能如下所示:

+----+-------------+
| id | value       |
+----+-------------+
|  1 | a           |
|  2 | b           |
|  3 | b           |
|  4 | c           |
|  5 | a           |
|  6 | a           |
|  7 | a           |
|  8 | a           |
|  9 | c           |
|  10| c           |
+----+-------------+

查询应该返回每个值序列的项目数:

+----+-------------+
| value | count    |
+----+-------------+
|  a    | 1        |
|  b    | 2        |
|  c    | 1        |
|  a    | 4        |
|  c    | 2        |
+-------+----------+

到目前为止,我还没有找到解决方案,至少对于大型表来说还不够快。理想情况下,会有一个“分组依据”声明,不会弄乱记录的顺序。

1 个答案:

答案 0 :(得分:2)

SELECT value, count(*) FROM (
  SELECT value,
    (CASE WHEN @v != value THEN @i:=@i+1 ELSE @i END) gid,
     @v := value FROM myTable, (SELECT @v:='', @i := 0) vars
) tbl
GROUP BY gid