我正在尝试为以下情况定义NEsper事件语句。我有3个事件--例如苹果、香蕉和橙子。它们都有属性- (bool) eatable,(datetime) timestamp。我想要捕捉模式,如果有多个事件可吃-在几乎相同的时间戳上是真的。如果它们中只有一个是可吃的(只有一个是真的),在几乎相同的时间戳(时间差,例如1秒),它是可以的。但是,如果它们在几乎相同的时间戳(时间差,例如1秒)上有2个或更多可吃的true,则应该捕获模式。如何定义这种情况下的EPL语句?谢谢你的建议。
向Narsu致以最良好的问候
发布于 2020-10-29 03:35:45
这里使用长时间戳,因为Java没有"datetime“类型(可能有.NET类型)。
只需将where子句更改为更详细的标准即可。
可以使用"after“和”Math#abs“来代替减号和之前的边界,但这里似乎更容易一些简单的算术运算。
create schema Apple(eatable boolean, ts long);
create schema Banana(eatable boolean, ts long);
create schema Orange(eatable boolean, ts long);
select * from Apple#lastevent as a, Banana#lastevent as b, Orange#lastevent as o
where {a.eatable, b.eatable, o.eatable}.countOf(v=>v) = 1 // exactly one is eatable
and (Math.abs(a.ts - b.ts)+Math.abs(b.ts - o.ts)) < 1000000https://stackoverflow.com/questions/64571176
复制相似问题