Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从纪元日期开始按月聚合-neo4j cypher 目标_Neo4j_Cypher_Average_Aggregate Functions - Fatal编程技术网

从纪元日期开始按月聚合-neo4j cypher 目标

从纪元日期开始按月聚合-neo4j cypher 目标,neo4j,cypher,average,aggregate-functions,Neo4j,Cypher,Average,Aggregate Functions,我试图查询neo4j的平均分数,按月份汇总。 背景 my DB中的date属性设置为历元时间戳 工作至今 到目前为止,我有以下代码 MATCH(d:data) RETURN avg(d.score), date(datetime({epochMillis:d.submitted})) AS date 问题 这将返回平均分数,每天(记录存在的每一天) 我希望得到每个月的平均值,而不是天数 也试过 我有一个很好的谷歌,似乎找不到一个答案不依赖安装apoch插件(我没有) 我发现了以下内容,但就是不

我试图查询neo4j的平均分数,按月份汇总。

背景 my DB中的date属性设置为历元时间戳

工作至今 到目前为止,我有以下代码

MATCH(d:data) RETURN avg(d.score), date(datetime({epochMillis:d.submitted})) AS date
问题 这将返回平均分数,每天(记录存在的每一天)

我希望得到每个月的平均值,而不是天数

也试过 我有一个很好的谷歌,似乎找不到一个答案不依赖安装apoch插件(我没有)

我发现了以下内容,但就是不明白(像大多数neo4j文档一样)它实际上想说什么。

附加的


理想情况下,我希望从“今天”开始最多报告12个月,并包括月份,即使没有该月份的记录(返回月份名称和0),但不确定这是否如此简单,因此任何想法都值得感谢

最简单的方法是按年份和月份进行汇总:

MATCH (d:data) 
RETURN apoc.date.format(d.submitted, 'ms', 'YYYY-MM') AS month,
       avg(d.score) AS score
ORDER BY month DESC
LIMIT 12
或不带apoc.date.format:

MATCH (d:data)
WITH d, datetime({epochMillis:d.submitted}) as dt
RETURN dt.year as year, 
       dt.month as month,
       avg(d.score) AS score
ORDER BY year DESC, month DESC
LIMIT 12
但是,如果您想将过去12个月(或任何其他值)与可能的零一起使用,那么最好的方法是创建前几个月的列表(使用“duration”函数),然后可选地匹配日期范围内的值并计算平均值:

WITH date() AS today
UNWIND [
  i IN range(0, 11) | 
  datetime.truncate('month', today - duration({months: i}))
] AS firstDayOfMonth
OPTIONAL MATCH (A:data) 
WHERE A.submitted >= timestamp(firstDayOfMonth) AND
      A.submitted <  timestamp(firstDayOfMonth + duration({months: 1}))
RETURN apoc.date.format(timestamp(firstDayOfMonth), 'ms', 'YYYY-MM') AS month,
       coalesce(avg(A.score), 0) AS score
日期()为今天的

放松[
i在(0,11)|范围内
truncate('month',today-duration({months:i}))
]作为每月的第一天
可选匹配(A:数据)
其中A.submitted>=时间戳(每月第一天)和
A.提交<时间戳(每月第一天+持续时间({months:1}))
返回apoc.date.format(时间戳(每月第一天),'ms','YYYY-MM')作为月份,
合并(平均分数,0)作为分数

谢谢,无论如何,我可以不用
apoch
扩展名完成这项工作?。。。我将
apoc.date.format(timestamp(firstDayOfMonth),'ms','yyyyy-MM')替换为月份
,将
datetime(datetime({epochmills:timestamp(firstDayOfMonth)})替换为月份
,效果良好
left()
不会修剪,会导致错误,但如果没有apoch无法复制整理,我可以运行此命令。谢谢again@Simon不客气。是的,当然,apoc只是用来简化代码。我添加了一个没有这个库的示例。