Mysql 根据group by和ID向行中添加(半)序列号,然后标记最新的两项

Mysql 根据group by和ID向行中添加(半)序列号,然后标记最新的两项,mysql,Mysql,我想做一些与之前相反的事情 下面是我的示例表: ID NAME ---- ---- 1 Apple 2 Apple 3 Apple 4 Bravo 5 Bravo 6 Cat 7 Cat 8 Cat 9 Cat 10 Apple 11 Apple 我想添加一个新行,为每组项目添加一个序列号。问题是有些项目出现多次,但不属于同一组。它们只有在紧接着另一个顺序ID出现时才属于一起 更新后的表应如下所示: ID GROUP

我想做一些与之前相反的事情

下面是我的示例表:

ID   NAME    
---- ----
1    Apple
2    Apple
3    Apple
4    Bravo
5    Bravo
6    Cat
7    Cat
8    Cat
9    Cat
10   Apple
11   Apple
我想添加一个新行,为每组项目添加一个序列号。问题是有些项目出现多次,但不属于同一组。它们只有在紧接着另一个顺序ID出现时才属于一起

更新后的表应如下所示:

ID   GROUP NAME    
---- ----- ----
1    1     Apple
2    1     Apple
3    1     Apple
4    2     Bravo
5    2     Bravo
6    3     Cat
7    3     Cat
8    3     Cat
9    3     Cat
10   4     Apple
11   4     Apple
ID   GROUP NAME   MARK    
---- ----- ----   ----
1    1     Apple  false
2    1     Apple  true
3    1     Apple  true
4    2     Bravo  true
5    2     Bravo  true
6    3     Cat    false
7    3     Cat    false
8    3     Cat    true
9    3     Cat    true
10   4     Apple  true
11   4     Apple  true
然后作为最后一步,我想分别标记每组中最新的两个项目,即ID值最高的项目,有点像这样:

ID   GROUP NAME    
---- ----- ----
1    1     Apple
2    1     Apple
3    1     Apple
4    2     Bravo
5    2     Bravo
6    3     Cat
7    3     Cat
8    3     Cat
9    3     Cat
10   4     Apple
11   4     Apple
ID   GROUP NAME   MARK    
---- ----- ----   ----
1    1     Apple  false
2    1     Apple  true
3    1     Apple  true
4    2     Bravo  true
5    2     Bravo  true
6    3     Cat    false
7    3     Cat    false
8    3     Cat    true
9    3     Cat    true
10   4     Apple  true
11   4     Apple  true

如何在MySQL中做到这一点?

使用变量,首先按id和名称创建组顺序,然后按id对这些grp进行排序,然后标记前两个

输出


将较低/较旧的ID标记为false,而不是最新的ID,以分配通过内联赋值有条件递增的group use变量。对于第二个任务-请注意,如果您颠倒顺序,最后两个将成为前两个。