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.
我将假设这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)