0

我正在尝试为以下情况定义 NEsper EPL 事件语句。我有 3 个事件 - 例如苹果、香蕉和橙子。它们都有属性——(布尔)可食用,(日期时间)时间戳。如果不止一个事件是可食用的,我想抓住这种模式——在几乎相同的时间戳上是真的。如果在几乎相同的时间戳(例如 1 秒的时间差)中只有一个是可食用的(只有一个具有可食用的真),那就没问题了。但是,如果他们在几乎相同的时间戳(例如 1 秒的时间差)有 2 个或更多可食用的真值,则应捕获该模式。如何为这种情况定义 EPL 语句?感谢您的任何建议。

最好的问候纳尔苏

4

1 回答 1

0

在这里使用长时间戳,因为 Java 没有“日期时间”类型(也许 .NET 有)。

只需更改 where 子句以获得更详细的标准。

代替减号和 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)) < 1000000
于 2020-10-28T19:35:45.053 回答