如何解决如何使用neo4j Cypher查询创建直方图输出?
在我们的图形模型实体中具有create_time
和delete_time
属性的情况下,有没有一种有效的方法来创建查询,该查询将返回计数,类似于直方图,从而指示实体“在哪个时间段存在” “?时间仓也将是一个变量。例如,过去10年的每年,或者过去36个月的每月,或者过去30天的每天。时间以整数格式存储(但是可以根据需要更改)。
解决方法
下面是一个示例,该示例如何获取Entity
值落在最近N个M天窗口内的create_time
个节点的数量:
WITH timestamp() AS now
MATCH (e:Entity)
WHERE e.create_time > now - ($nPeriods * $periodMillis)
RETURN (now - e.create_time)/$periodMillis AS period,COUNT(*) AS cnt
ORDER BY period
查询假设您通过M
和N
query parameters传递了periodMillis
和nPeriods
。例如,如果您希望每个期间为30天,并查看最近5个期间的计数,则可以将30*24*60*60*1000
传递为periodMillis
,将5传递为nPeriods
。>
要加快此查询的速度,您还应该在:Entity(create_time)
上创建一个index。
以下是示例结果(使用上述示例编号):
╒════════╤═════╕
│"period"│"cnt"│
╞════════╪═════╡
│0 │22 │
├────────┼─────┤
│1 │20 │
├────────┼─────┤
│2 │101 │
├────────┼─────┤
│3 │62 │
├────────┼─────┤
│4 │44 │
└────────┴─────┘
期间0是最后30天(期间“现在”结束,而不是午夜),期间1是之前30天,依此类推。 使用午夜作为边界更加复杂,可能需要您指定时区并使用时间函数(例如these)。
[更新]
如果您的月经是一个月,则可以使用neo4j temporal values and functions来执行尊重一个月中实际天数的计算。
例如,如果参数nMonths
提供了每月的最大数量:
WITH date() AS today
MATCH (e:Entity)
WITH duration.inMonths(e.create_time,today).months AS period
WHERE period < $nMonths
RETURN period,COUNT(*) AS cnt
ORDER BY period
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。