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

时间:2016-04-29 18:26:10

标签: azure azure-sql-database azure-stream-analytics

我想在流分析中计算连续重复的值。例如,我有一个传感器,它每秒记录0或1的值。我想设置一个1分钟的滑动窗口,并计算如果我连续超过30个0。我不能在小组条款中计算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' s为7,最大连续0' s为7)

MinId Value MaxCount
1, 1, 7
8, 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);

使用流式分析,您可以使用LAG功能,但我无法找到计算连续数字的方法。

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

我不认为你可以使用今天的功能轻松计算连续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的时间戳”。