1

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

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 功能,但我找不到计算连续数字的方法。

有任何想法吗?

4

1 回答 1

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 的时间戳”。

于 2016-04-30T23:31:02.413 回答