1

我有一个类似于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 小时。

4

1 回答 1

1

我认为您只需要扩展RETURNhour变量即可:

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 中查询时,#{7.days.ago}您将拥有{start_time}并传入一个start_time: 7.days.ago哈希作为第二个参数。

于 2015-11-05T06:14:05.917 回答