Это похоже на проблему разрывов и островков. Предполагая, что у вас есть другой столбец, который определяет порядок записей (скажем, id
), вот подход, который использует разницу между номерами строк для определения групп смежных записей:
select
var,
case when var is not null
then row_number() over(partition by var, rn1 - rn2 order by id)
end rnk
from (
select
t.*,
row_number() over(order by id) rn1,
row_number() over(partition by var order by id) rn2
from mytable t
) t
order by id
Примечание что оконные функции доступны только в последней версии MySQL (то есть версии 8.0).