是这样的吗?
/*
create temporary table t(can_id int, status varchar(20));
insert into t values
(001 , 'section 1 question 1'),
(001 , 'section 1 question 2'),
(001 , 'section 1 question 3'),
(001 , 'section 1 question 4'),
(001 , 'section 2 question 1'),
(001 , 'section 2 question 2'),
(001 , 'section 2 question 3'),
(001 , 'section 2 question 4'),
(001 , 'section 3 question 1'),
(001 , 'section 3 question 2'),
(001 , 'section 3 question 3'),
(002 , 'section 1 question 1'),
(002 , 'section 1 question 2'),
(002 , 'section 1 question 3'),
(002 , 'section 2 question 1'),
(002 , 'section 2 question 2'),
(002 , 'section 2 question 3'),
(002 , 'section 3 question 1'),
(002 , 'section 3 question 2'),
(002 , 'section 3 question 3'),
(002 , 'section 3 question 4');
*/
select distinct s.canid from
(
select t.can_id as tcanid, t.status as tstatus ,
case when @previd <> substring(t.status,1,9) then
@sno :=if(@previd <> substring(t.status,1,9),@sno + 1,1)
else @sno
end as canid
,@previd:=substring(t.status,1,9) prevcanid
from t,
(select @sno:= 0) as sn
,(select @Previd:= '') as p
order by substring(t.status,1,9)
) s