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
散列作为第二个参数。
我有一个类似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
散列作为第二个参数。