Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Contar valores duplicados consecutivos no SQL


Vou presumir que id é único e crescente. Você pode obter contagens de valores consecutivos usando os diferentes números de linha. O seguinte conta todas as sequências:
select grp, value, min(id), max(id), count(*) as cnt
from (select t.*,
             (row_number() over (order by id) - row_number() over (partition by value order by id)
             ) as grp
      from table t
     ) t
group by grp, value;

Se você quiser a sequência mais longa de 0s:
select top 1 grp, value, min(id), max(id), count(*) as cnt
from (select t.*,
             (row_number() over (order by id) - row_number() over (partition by value order by id)
             ) as grp
      from table t
     ) t
group by grp, value
having value = 0
order by count(*) desc