我正在尝试实现一个EPL查询,该查询可以获取Time(t)&的平均值。时间(t-1)。
例如:
a)在前5秒(秒0-5)中有2个事件,平均值为12
b)在接下来的5秒(秒5-10)中有3个事件,其平均值为23,并且在EPL查询中捕获此信息,我还能够看到前一次的12个平均值前5秒的窗口
我的想法是错开对象/查询,使得最终的epl查询具有Time(t)&的快照。时间(t-1),如虚拟创建的对象ScoreInfoBeforeAfter中所示。然而,它不起作用。
任何想法都将不胜感激。感谢。
~~~~
// The object being published to the Esper stream:
class ScoreEvent { int score; ... }
答案 0 :(得分:7)
看起来关键字先前是解决方案。
http://esper.codehaus.org/esper-2.1.0/doc/reference/en/html/functionreference.html
请参阅:第7.1.9节
就我在原帖中描述的例子而言,这是我找到的相应解决方案。它似乎工作正常。
INSERT INTO ScoreInfo
SELECT
'ScoreInfo' as a_Label,
average AS curAvg,
prior(1, average) AS prevAvg
FROM
ScoreEvent.win:time_batch(5 sec).stat:uni(score);
SELECT
*
FROM
ScoreInfo.win:length(1);
..
然后它很好,因为你可以做这样的事情:
SELECT
'GT curAvg > prevAvg' as a_Label,
curAvg,
prevAvg
FROM
ScoreInfo.win:length(1)
WHERE
curAvg > prevAvg;
SELECT
'LTE curAvg <= prevAvg' as a_Label,
curAvg,
prevAvg
FROM
ScoreInfo.win:length(1)
WHERE
curAvg <= prevAvg;