Sql 如何获得相干单元的最大计数?

Sql 如何获得相干单元的最大计数?,sql,Sql,我的表格中有以下数据: ID-数据 1-0 2-10 3-100 4-60 5-0 6-0 7-15 8-100 9-100 10-70 11-10 12-0 13-0 我想要的是最大行数>0 该数据以给定总能量的百分比显示设备的能量使用情况。 我最想知道的是:设备“开启”的最长时间段是多长?我猜您希望示例数据的结果是5(最长的非零数序列)。您可以在Oracle中使用递归CTE实现这一点: with testData as ( select '1' id, '0' val from dual u

我的表格中有以下数据:

ID-数据

1-0
2-10
3-100
4-60
5-0
6-0
7-15
8-100
9-100
10-70
11-10
12-0
13-0

我想要的是最大行数>0

该数据以给定总能量的百分比显示设备的能量使用情况。
我最想知道的是:设备“开启”的最长时间段是多长?

我猜您希望示例数据的结果是5(最长的非零数序列)。您可以在Oracle中使用递归CTE实现这一点:

with testData as (
select '1' id, '0' val from dual
union all
select '2', '10' from dual
union all
select '3', '100' from dual
union all
select '4', '60' from dual
union all
select '5', '0' from dual
union all
select '6', '0' from dual
union all
select '7', '15' from dual
union all
select '8', '100' from dual
union all
select '9', '100' from dual
union all
select '10', '70' from dual
union all
select '11', '10' from dual
union all
select '12', '0' from dual
union all
select '13', '0' from dual
) ,
cte (id, val, sumX) as (
select t.id, val, case when val !=0 then 1 else 0 end from testData t where id = 1
union all
select t.id, t.val,  case when t.val !=0 then sumX+1 else 0 end 
from testData t
inner join cte
    on cte.id = t.id-1  
)
select max(sumx) from cte

您使用的是什么版本的SQL?您将什么定义为“时间段?”或者您是否假设时间随着
ID
的增加而增加?能否显示您的预期结果?@NevilleK如果我理解正确,OP希望知道设备连续“打开”(“打开”)的最长孤岛的长度定义为具有大于零的
数据
值。您使用的是哪个DBMS?Postgres?Oracle?