neo4j - 如何使用 neo4j Cypher 查询创建直方图输出?
问题描述
在我们的图模型实体中使用create_time
和delete_time
属性,是否有一种有效的方法来创建将返回计数的查询,类似于直方图,指示实体“存在”的时间段?时间箱也将是一个变量。例如,过去 10 年每年,或过去 36 个月每月,或过去 30 天每天。时间以整数格式存储(但如果需要可以更改)。
解决方案
以下是如何获取Entity
其create_time
值落在最后 N M 天窗口内的节点数的示例:
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
该查询假定您通过andM
和查询参数传递。例如,如果您希望每个周期为 30 天,并查看最后 5 个周期的计数,您可以传递as和 5 as 。N
periodMillis
nPeriods
30*24*60*60*1000
periodMillis
nPeriods
为了加快这个查询,你还应该在:Entity(create_time)
.
这是一个示例结果(使用上面的示例编号):
╒════════╤═════╕
│"period"│"cnt"│
╞════════╪═════╡
│0 │22 │
├────────┼─────┤
│1 │20 │
├────────┼─────┤
│2 │101 │
├────────┼─────┤
│3 │62 │
├────────┼─────┤
│4 │44 │
└────────┴─────┘
周期 0 是过去 30 天(周期“现在”结束,而不是午夜),周期 1 是之前的 30 天,依此类推。使用午夜作为边界更复杂,可能需要您指定时区并使用时间函数(如这些)。
[更新]
如果您的周期是一个月,您可以使用 neo4j时间值和函数来执行符合一个月中实际天数的计算。
例如,如果参数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
推荐阅读
- arrays - 我们不能用回车符\r比较字符串吗?
- javascript-automation - 通过能够在调试器中探索变量来克服缺乏 JXA 文档的问题
- c# - 如何修改数组中正在访问的索引
- spring - spring security reactive - 如何调试“无效凭据”错误?
- api - 如何从系统角度对微服务进行版本控制
- jestjs - 无法模拟自定义对象 addEventListener(e)
- c# - 将类的多个属性传递给函数并返回自定义属性的值
- python - 从 Linux 调用 python 脚本会导致 TypeError:file() 最多接受 3 个参数(给定 4 个)
- python - 映射dict值的dict以创建新结果
- wordpress - WordPress - “客户”子菜单上的 Woocommerce 自定义列