检测表格中的模式

Sfi*_*oza 8 mysql sql database

有一个像这样的表:

Table: statuses
ID  | status
----|---------
777 | 1
675 | 1
651 | 0
611 | 1
600 | 0
554 | 1
443 | 0
323 | 0
222 | 1
112 | 1
Run Code Online (Sandbox Code Playgroud)

如何仅选择行中的两个(或更多)状态为0的行?(在示例中仅为443,323),并按第一个ID串联对它们进行分组.

所以输出将是:

ID  | status | group
----|--------|---------
443 | 0      | 443
323 | 0      | 443
Run Code Online (Sandbox Code Playgroud)

amo*_*mow 1

select 
id, STATUS,
@st_order:=if(@pre_st!=status,0,@st_order+1) as status_order,
@group_leader:=if(@pre_st!=status,id,@group_leader) as group_leader,
@pre_st:=status
from statuses,(select @st_order:=-1, @pre_st:=-1, @group_leader:=-1) val 
Run Code Online (Sandbox Code Playgroud)

这个sql给你输出

id、
status、
连续相同状态的行号、
相同状态的组长、
最后一列无用

根据您的输入,前四列输出为

ID|状态|状态行号|状态组长
777| 1 | 0 | 777
675| 1 | 1 | 777
651| 0 | 0 | 651
611| 1 | 0 | 611
600| 0 | 0 | 600554
| 1 | 0 | 554
443| 0 | 0 | 443
323| 0 | 1 | 443222
| 1 | 0 | 222
112| 1 | 1 | 222

所以你可以在外部选择中做任何你想做的事情。