2014-10-31 49 views
1

我是Esper开发新手,我遇到了一个小问题。Esper查询关于group by for(价值) - SQL

在SQL中,我有后续的查询翻译成艾斯波:由用户从卡组选最大(时间)

我想要做的是,对于所有,我有活动,我想选择每个用户的最大(时间)并显示它。

在Esper中,我将它翻译为以下方法:从用户窗口组中选择max(time)。但是,与SQL不同的是,每一个进入窗口的事件都会显示出来,所以我最终得到了每个用户的所有时间值,而不是最高值:/它不是通过“group by “ 我假设。如果您有关于如何解决这个问题的任何暗示,我会很高兴地接受他们:)

问候,

本杰明6

回答

0

艾斯波是不连续的查询处理和连续查询生成输出所有的时间如果有人在倾听。你可以做的是发送所有事件,然后使用“iterate()”,或者你可以使用一个即时查询或使用输出速率限制,如“每1分钟输出一次”。

+0

你好,谢谢你的回复。我实际上尝试了“每1分钟输出一次”,但它根本不输出任何内容:/ – 2014-10-31 13:01:47

+0

尝试“每1分钟输出一次快照”代替(每隔一分钟会输出查询结果,无论是否有新的最近一分钟的活动)。 – xpa1492 2014-11-03 00:15:09

+0

会尝试谢谢:) – 2014-11-06 09:24:30

0

例如,如果您有: time1 = 10,user = 1 & time2 = 11,user = 1 --->我只想得到time2 = 11,user = 1。然而,在esper中,它输出两个,这是正常的。在应用查询之前保留所有事件的任何方法?

0

看起来您正在处理连续的事件流,并且您期望从中获取最大值。

这不能直接完成,因为Esper中的每个事件都是一个单独的实体。您可以从单个事件中获取最大值,但不能从多个事件中获取。这就是你的情况,你从单一重要事件中获得最大价值。因此,您可以看到所有打印的事件。

为了达到你想要的效果,我建议你应该在Esper中使用Windows或上下文来累积特定时间的事件(或者直到满足条件)。然后,在窗口中收集的一系列事件中,您可以根据您的情况选择最大值,然后打印相同的值。

您可以参考这个herehere的Espertech文档。