Neo4j 时序聚合查询

Neo4j time series aggregation query

我有一个类似http://neo4j.com/docs/1.9.4/cypher-cookbook-path-tree.html的年月日时分图,其中一分钟可能有0个或多个事件发生,而一个事件只能发生一次。

我希望能够构建一个查询来匹配一段时间内的频率,例如

在过去 7 天内,是否每 3 小时至少发生 2 起事件。

我可以获取过去 7 天内发生的所有事件并按小时计算:

"MATCH (e:Event)-[:occurred]->
         (minute:`Time::Minute`)-->
         (hour:`Time::Hour`)-->
         (day:`Time::Day`)-->
         (month:`Time::Month`)-->
         (year:`Time::Year`)
WHERE  e.occurred_at > #{7.days.ago}
RETURN year, month, day, hour, COUNT(DISTINCT e)"

但我不知道如何扩展此查询以将事件计数分组为每小时 3 个。

我认为您只需要扩展 RETURN 即可拥有 hour 变量:

MATCH (e:Event)-[:occurred]->
         (minute:`Time::Minute`)-->
         (hour:`Time::Hour`)-->
         (day:`Time::Day`)-->
         (month:`Time::Month`)-->
         (year:`Time::Year`)
WHERE  e.occurred_at > #{7.days.ago}
RETURN year, month, day, hour - (hour % 3) AS hour_group, COUNT(DISTINCT e)

并不是说您应该养成使用 Neo4j 参数的习惯。这意味着当您在 Ruby.

中查询时,您将拥有 {start_time} 并传入 start_time: 7.days.ago 散列作为第二个参数。