Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/neo4j/3.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密码查询&x27;这是我的财产。获取具有最大属性值的节点_Neo4j_Cypher - Fatal编程技术网

基于相关节点的Neo4j密码查询&x27;这是我的财产。获取具有最大属性值的节点

基于相关节点的Neo4j密码查询&x27;这是我的财产。获取具有最大属性值的节点,neo4j,cypher,Neo4j,Cypher,我的结构如下: (A)-[:many]->(B)-[:also_many]->(C) B具有名称属性。并且C具有日期属性A与许多B相关,而且每个B与许多C相关 我想得到唯一的B和C,其中C.date是最高的 日期的存储方式如下:“YYYY-MM-DD HH:MM:SS”。我使用apoc.date.parse(date)获取时间戳值 我真的不想知道如何继续 样本数据集: create(o:A{outlet:“SFO”),(A:B{name:“Varun”,日期:“2017-04-01

我的结构如下:

(A)-[:many]->(B)-[:also_many]->(C)
B
具有名称属性。并且
C
具有日期属性<代码>A与许多
B
相关,而且每个
B
与许多
C
相关

我想得到唯一的
B
C
,其中
C.date
是最高的

日期的存储方式如下:“YYYY-MM-DD HH:MM:SS”。我使用
apoc.date.parse(date)
获取时间戳值

我真的不想知道如何继续

样本数据集:

create(o:A{outlet:“SFO”),(A:B{name:“Varun”,日期:“2017-04-01 00:00”),(B:B{name:“Karen”,日期:“2017-04-12 00:00:00”),(c:B{name:“Vicky”,日期:“2017-06-01 00:00”),(aa:c{date 2017-09-8 00:00:00:00,tag no:“R2017123”,(ab:c{date date date 2017-09-02-02:00:00),tag no:“R221:00:“2017-09-10:00”,标签号:“R2017423”),(广告:C{date:“2017-09-23 00:00:00”,标签号:“R2017523”),(ae:C{date:“2017-09-10 00:00:00”,标签号:“R2017930”),(ba:C{date:“2017-09-02 00:00:00”,标签号:“R2017928”),(bb:C{date:“2017-09-15 00:00:00:00”,标签号:“R2017039”),(bc:C:“2017-09-10:00:00,标签号:“R2017800:00:“2017-09:00”例如:日期:日期:日期:2017-09-09-21,日期:2017-09-09-21,日期:2017-09-21,标签编号:“R201717122”),,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,(,(,(,(日期:日期:日期:日期:日期:日期:日期:日期:日期:日期:日期:日期:日期:日期:日期:日期:日期:2007,(日期:日期:日期:日期:日期:日期:日期:日期:日期:日期:日期:日期:日期:2017-日期:2017-日期:2017-2017-2017-2009-2009-2009-2009-2009-2009->(b) ,(o)-(a)-(a)-(a)-(a)-(a)-(a)-(a)-(a)-(a)-(a)-(a)-(a)-(a)-(a)-(a)-(a)-(a)-(a)-(a)-(a)-(a)-(a)-(a)-(b)-(b)-(b)-(b)-(b)-(b)-(b)-(b)-(b)-(b)-(b)-(b)-(b)-(b)-(b)-(b)-(b)-(b)-(b)-(b)-(b)-(b)-(b)-(c)-(c)-(c)-(c)-(c)-(c)-(c)-(c)-(c)-(c)-(c)-(c)-(c)-(c)-(c)-(c)-(c)-(c)-(c)-(c)-(c)-(c)-(c)-(c)-(c)-(c)-(c)-(c)-(c);

我需要两个问题:

我想返回日期在say
2014-04-01
2014-05-01
范围内的
B
节点,并通过
B.date
返回每个
B
节点的最新相关
C
节点。在数据集中,我有两个
C
节点,它们具有相同的
date
。但是查询应该只为每个
B
节点返回一个结果

第二个查询是:

返回日期在上述值内的
B
节点,这些节点没有日期在日期范围内的
C
节点,例如“2017-09-01”和“2017-09-09”

我想返回日期在2014-04-01和 2014-05-01和B日期前每个B节点的最新相关C节点。在里面 在数据集中,我有两个具有相同日期的C节点。但质疑 每个B节点只应返回一个结果

这应该起作用:

MATCH (b:B)-[:subs]->(c:C)
// filter b nodes by date range
WHERE b.date >= "2017-04-01" and b.date <= "2017-04-15"
// store c nodes into collection and get the max date for c nodes
// grouped by b
WITH b as b, collect(c) as cs, MAX(c.date) as maxDate
// return b, filtering only c nodes that date are equals to maxDate
// getting only the first filtered 
return b, filter(c in cs WHERE c.date = maxDate)[0]
匹配(b:b)-[:subs]->(c:c)
//按日期范围筛选b节点
其中b.日期>=“2017-04-01”和b.日期(c:c)

其中(b.date>=“2017-04-01”和b.date为什么需要APOC?这种格式的日期可以按字典顺序排列,因此
按c.date DESC LIMIT 1排序应获得最大值。当然,如果要使用该日期,必须对其进行解析,但可以在应用程序代码中进行解析。我尝试使用max()函数与此日期格式不兼容。什么是“词典编纂法”?这对我来说是一个新术语。是否有函数可以获取几个节点的最高日期?例如,请考虑字母顺序。虽然我不建议使用它,
max()
函数也应该工作:
与['2015-07-16 17:07:21','2017-10-04 14:26:19']AS xs将xs展开为x返回max(x)
(但获取具有最高值的实际图形节点将更加困难)。此查询回答您的第一个问题?
匹配(b:b)-[:subs]->(c:c),其中b.date>=“2017-04-01”和b.date不。对于每个b节点,我需要在该b节点的所有相关C节点中具有最高日期的C节点。@notANerdDev您可以共享一个示例数据集吗?这种方式将更容易帮助您。好的。给我一点时间。我将编写一个密码查询来为您创建一个示例数据集。谢谢一吨。添加。谢谢帮助。一直在尝试我想得太久了。@notANerdDev更新了我的答案。请看一看。
MATCH (b:B)-[:subs]->(c:C)
WHERE (b.date >= "2017-04-01" and b.date <= "2017-04-15")
AND (c.date <= "2017-09-01" and c.date >= "2017-09-09")
RETURN b