对相似的连续记录进行分组,使它们不被其他不同的记录分隔开来-Mysql

对相似的连续记录进行分组,使它们不被其他不同的记录分隔开来-Mysql,mysql,Mysql,在MySQL中,如何对相似的连续记录进行分组,使它们不被其他不同的记录分隔开 id | type | 1 | 1 | 2 | 1 | 3 | 1 | 4 | 5 | 5 | 1 | 6 | 8 | 7 | 1 | 8 | 3 | 9 | 3 | 10 | 3 | 结果应该是这样的: id | type | 3 | 1 | 4 | 5 | 5 | 1 | 6 | 8 | 8 | 1

在MySQL中,如何对相似的连续记录进行分组,使它们不被其他不同的记录分隔开

id | type |
1  | 1    |
2  | 1    |
3  | 1    |
4  | 5    |
5  | 1    |
6  | 8    |
7  | 1    |
8  | 3    |
9  | 3    |
10 | 3    |
结果应该是这样的:

id | type |
3  | 1    |
4  | 5    |
5  | 1    |
6  | 8    |
8  | 1    |
10 | 3    |

您只需要一个标准组:

select count(*) id, type, `group`
from mytable
group by type, `group`

请注意,您需要对保留字“group”进行分隔。

您的问题的格式相当不正确。我认为以下内容可能与您想要的内容非常接近。它通过分配一个新的
grp
列来标识连续组,从而基于连续的
类型
值来标识组

select type, max(id) as maxid, count(*) as numingroup
from (select t.*,
             (@grp := if(@type = type, @grp, if(@type := type, @grp + 1, @grp + 1))) as grp
      from my_table t cross join
           (select @grp := 0, @type := -1)x
      order by id
     ) t
group by grp, type;

不清楚你所说的“相似的、最近的、仅最近的行”是什么意思。你的问题是什么?时间戳与第一个问题无关。最近,表示下一行和上一行相似。如果它们被其他不同的行分开,不要分组。结果应该是4,5,5,对吗?结果应该是!3,4,5,6,8
  DROP TABLE IF EXISTS my_table;

  CREATE TABLE my_table
  (id INT NOT NULL AUTO_INCREMENT PRIMARY KEY
  ,type INT NOT NULL
  ,x INT NOT NULL
  );

  INSERT INTO my_table VALUES
  (1,1,1),
  (2,1,1),
  (3,1,1),
  (4,5,5),
  (5,1,1),
  (6,8,8),
  (7,1,1),
  (8,1,1);

  SELECT MIN(c.id) id 
       , a.type
       , a.x
    FROM my_table a
    LEFT 
    JOIN my_table b 
      ON b.id + 1 = a.id 
     AND b.type = a.type
     AND b.x = a.x
    LEFT 
    JOIN my_table c 
      ON c.id >= a.id
     AND c.type = a.type
     AND c.x = a.x
    LEFT 
    JOIN my_table d 
      ON d.id - 1 = c.id 
     AND d.type = a.type
     AND d.x = a.x
   WHERE b.id IS NULL 
     AND c.id IS NOT NULL
     AND d.id IS NULL
   GROUP 
      BY a.id; 

  +------+------+---+
  |  id  | type | x |
  +------+------+---+
  |    3 |    1 | 1 |
  |    4 |    5 | 5 |
  |    5 |    1 | 1 |
  |    6 |    8 | 8 |
  |    8 |    1 | 1 |
  +------+------+---+