2015-11-05 82 views
1

我有一个类似于http://neo4j.com/docs/1.9.4/cypher-cookbook-path-tree.html的年,月,日,小时和分钟图,其中一分钟可能有0个或更多事件发生,并且事件只能发生一次。Neo4j时间序列聚合查询

我希望能够建立一个查询匹配频率一段时间,如

有没有出现每3小时为过去7天内至少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小时。

回答

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}的intead将具有{start_time}并传入start_time: 7.days.ago散列作为第二个参数。

+0

更新,我实际上意识到我在做你的建议。我在过去7天内按小时计事件数。我其实希望在过去的7天里每3个小时都有一次活动。 – user1012802

+0

啊,我觉得不是很难。看看我的编辑! –