2013-06-25 89 views
0

我的事件流通常包含一個打開的事件,然後是一個關閉事件。我們稱它們爲OC,相當。但是,有兩個細節:Esper:在觸發事件到達後在時間內找到最早的事件

  1. O可以跟隨一個或多個OC之前到達
  2. C可能會完全丟失(見下文)

假設C應該到達不遲於T之後的部分O。否則,C被認爲是失蹤。當最後到達C時,所有打開的O都早於T從此C被視爲孤兒並且不感興趣。

我想艾斯波火每對O接着C,其中最早的O不更遠然後從CT被選擇。中間的任何O以及在選定的O之前被跳過。

例如,

O1 O2 O3 ... C

應該選擇(O1,C)如果datediff(O1, C) < T

應該選擇(O2,C)如果以上是假的,datediff(O2, C) < T

一個在接近失去了我的脾氣這個問題。看起來我的思想與esper不兼容。你的幫助非常令人滿意。

回答

0

這可能類似於下圖,想法是當事件到達時,我們要查看事件的最後1分鐘並找到與時間差異匹配的第一個事件。如果需要的話,還有第二個陳述過濾掉沒有匹配的那些。

插入到配對 選擇,(選擇窗口().firstOf(V => v.time - e2.time < T)從Event.win:time(1分鐘)爲E1),其從匹配 事件爲E2

SELECT * FROM對,其中匹配不爲空

+0

首先,感謝大家的響應, 銘記你的想法,我想下面的查詢: '選擇(選擇第一個(* )來自O.win:time(1小時)),c。* from C c;' 它從'C'的小時內輸出最早的'O'。不幸的是,當隨後的「O」對和「C」在同一小時內到達時,它繼續報告最早的「O」。也就是說,對於所有事件在1小時內到達的以下系列: 'O1 O2 C1 O3 C2' ,它返回對'(O1,C1)'和'(O1,C2)'。而我想要的是'(O1,C1),(O3,C2)'。當'C'到達時,必須有一些方法來重置到達'O'的時間窗口...... –