Azure 计算流分析中的连续重复值

Azure 计算流分析中的连续重复值,azure,azure-sql-database,azure-stream-analytics,Azure,Azure Sql Database,Azure Stream Analytics,我想计算流分析中的连续重复值。例如,我有一个传感器,它每秒记录0或1的值。我想设置一个1分钟的滑动窗口,如果我连续有30个以上的0,则计数。我无法计算group子句中的0,因为它们可能不是连续的。例如,如果我有: ID Value TimeStamp 1, 1, second 1 2, 1, second 2 3, 1, second 3 4, 1, second 4 5, 1, second 5 6, 1, second 6 7, 1, second 7 8, 0, second 8 9,

我想计算流分析中的连续重复值。例如,我有一个传感器,它每秒记录0或1的值。我想设置一个1分钟的滑动窗口,如果我连续有30个以上的0,则计数。我无法计算group子句中的0,因为它们可能不是连续的。例如,如果我有:

ID Value TimeStamp
1, 1, second 1
2, 1, second 2
3, 1, second 3
4, 1, second 4
5, 1, second 5
6, 1, second 6
7, 1, second 7 
8, 0, second 8 
9, 0, second 9
10, 0, second 10
11, 0, second 11
12, 0, second 12
13, 0, second 13
14, 0, second 14
15, 1, second 15
16, 1, second 16,
17, 1, second 17
18, 1, second 18 
我想获得:

MinId Value Count 
1, 1, 7
8, 0, 7
15,1, 4
或者更好,我想在同一分钟内得到, 其中(最大连续1为7,最大连续0为7)

在SQL中,我会这样做:

select grp, value, min(id), max(id), count(*) as cnt, max(fecha) as Fecha
from (select t.*,
             (row_number() over (order by id) - row_number() over (partition by value order by id)
             ) as grp
      from [StockSensor] t
     ) t
group by grp, value
order by min(id);
使用流分析,您可以使用滞后函数,但我找不到一种方法来计算连续的数字


有什么想法吗?

我认为,使用今天提供的功能,您无法轻松计算连续1或0的数量。 但是,如果您想在有x个连续的时间戳1(或0)的情况下输出所有时间戳,您可以执行以下操作

with PreviousLookups as
(
select 
   System.Timestamp Time,
   Value,
   lag(Value,1 ) over (limit duration(mi, 1)) ValueP1,
   lag(Value,2 ) over (limit duration(mi, 1)) ValueP2,
   lag(Value,3 ) over (limit duration(mi, 1)) ValueP3,
   lag(Value,4 ) over (limit duration(mi, 1)) ValueP4
from 
    iotInput timestamp by AppTimeStamp
 )

select
   Time
from
    PreviousLookups
 where
    Value * ValueP1  * ValueP2 * ValueP3 * ValueP4 = 1
上述查询输出具有5个连续1的所有时间戳。它可以修改为“有30个或更多连续0的时间戳”

需要更多详细信息:
with PreviousLookups as
(
select 
   System.Timestamp Time,
   Value,
   lag(Value,1 ) over (limit duration(mi, 1)) ValueP1,
   lag(Value,2 ) over (limit duration(mi, 1)) ValueP2,
   lag(Value,3 ) over (limit duration(mi, 1)) ValueP3,
   lag(Value,4 ) over (limit duration(mi, 1)) ValueP4
from 
    iotInput timestamp by AppTimeStamp
 )

select
   Time
from
    PreviousLookups
 where
    Value * ValueP1  * ValueP2 * ValueP3 * ValueP4 = 1