Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Zählen Sie aufeinanderfolgende doppelte Werte in SQL

Ich werde diese id annehmen ist einzigartig und nimmt zu. Sie können die Anzahl aufeinanderfolgender Werte erhalten, indem Sie die unterschiedlichen Zeilennummern verwenden. Im Folgenden werden alle Sequenzen gezählt:

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;

Wenn Sie die längste Folge von 0s wollen:

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