Для этого можно использовать некоторую технику пробелов и островков, используя разницу между номерами строк для построения групп последовательных записей, имеющих одинаковое значение.
Если id
s всегда увеличивается на 1
(без пробелов):
select sl, max(no_rec)
from (
select t.*, count(*) over(partition by sl, id - rn) no_rec
from (
select t.*, row_number() over(partition by sl order by id) rn
from mytable t
) t
) t
group by sl
В противном случае мы можем сгенерировать поддельный автоинкрементный идентификатор с row_number()
:
select sl, max(no_rec)
from (
select t.*, count(*) over(partition by sl, rn1 - rn2) no_rec
from (
select
t.*,
row_number() over(order by id) rn
row_number() over(partition by sl order by id) rn
from mytable t
) t
) t
group by sl
Примечание: для этого используются оконные функции, которые требуют MySQL 8,0. В более ранних версиях решить эту проблему гораздо сложнее.