在SQL中计算连续的重复值

abe*_*uwe 4 sql sql-server common-table-expression

我有一张这样的桌子

ID     OrdID     Value
1      1          0     
2      2          0
3      1          1
4      2          1
5      1          1
6      2          0
7      1          0
8      2          0
9      2          1
10     1          0
11     2          0
Run Code Online (Sandbox Code Playgroud)

我想得到值为0的连续值的计数.使用上面的例子,结果将是3(第6,7和8行).我正在使用sql server 2008 r2.

Gor*_*off 5

我将假设这id是独一无二的并且越来越多.您可以使用不同的行号来获取连续值的计数.以下计算所有序列:

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;
Run Code Online (Sandbox Code Playgroud)

如果你想要最长的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
Run Code Online (Sandbox Code Playgroud)