2016-04-29 221 views
0

我想在流分析計算連續重複的值。例如,我有一個傳感器,每秒記錄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的分別爲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的功能,但我不能找到一種方法來計算的連續號碼。

任何想法?

+0

需要更多詳細信息:https://spaghettidba.com/2015/04/24/how-to-post-a-t-sql-question-on-a-public-forum/ – TheGameiswar

回答

1

我不認爲你可以使用的功能可今天輕鬆計算連續的1或0的個數。 但是,如果您想要輸出x個連續的1s(或0s)的所有時間戳,您可以執行下面的操作。

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的時間戳」。