我正在尝试根据我想要的长链中的头部和尾部来划分不同的短链,并在短链中找到最大持续时间。
例如..
长链:
NA1 -> NA2 -> NA3 -> NA4 -> NB1 -> NB2 -> NB3 -> NB4 ->...
我想检查每条链中的最大持续时间是否为第二个节点。
NA1 -> NA2 -> NA3 -> NA4
NB1 -> NB2 -> NB3 -> NB4
..。
(n表示节点,A、b和数字是属性,每个节点都有自己的时长)
MATCH p = (A:Task{FROMLOCTYPE:"1"})-[:path*]->(b:Task{TOLOCTYPE:"4"})
WITH reduce(output = [], n IN nodes(p) | output + n ) as tasks
但是我被困在这里,不知道如何检查每个列表中的最大持续时间。
或者在每个列表中执行任何操作。
发布于 2020-02-24 22:06:43
我不知道这是否是你要找的东西,但是这里有一个关于如何找到一个最大值加上它在数组中的位置的例子:
MATCH p = (A:Task{FROMLOCTYPE:"1"})-[:path*]->(b:Task{TOLOCTYPE:"4"})
WITH
reduce(
output = [0, 0, 0],
n IN nodes(p) |
CASE
WHEN output[0] < n.duration THEN [n.duration, output[2], output[2]+1]
ELSE [output[0], output[1], output[2]+1]
) as tasks
RETURN
tasks[0] AS max,
tasks[1] AS positionInArray
在reduce中,我们创建一个包含3个元素的数组:
在第一个中,我们将存储找到的最大值,在第二个中,存储最大值在数组中的位置,在第三个中,它只是一个增量,用来跟踪我们在数组中的位置,,
,
,
,
这方面的一个很好的读物是:https://blog.armbruster-it.de/2015/03/cypher-fun-finding-the-position-of-an-element-in-an-array/
发布于 2020-02-25 23:27:19
(A:Task{FROMLOCTYPE:"LOAD_PORT"})-:wafer_path*->(b:Task{TOLOCTYPE:"LOAD_PORT"})匹配p=
返回p限制3
这张照片是我的样本数据。
对不起,我之前的描述不够清楚。
我想我的问题应该是当我找到一堆列表的时候。
如何同时搜索这些节点。
有点像如何在二维数组中找到数组的最大值。
我可以根据我想要的分类对节点进行分组。
返回匹配p= (A:Task{FROMLOCTYPE:"LOAD_PORT"})-:wafer_path*->(b:Task{TOLOCTYPE:"LOAD_PORT"})
p
P将返回Neo4j找到的所有P。
P中的节点有它自己的持续时间。
12,18,14,15
12,15,13,14
但是我不知道如何用cypher查询每组的最大持续时间。或检查最大持续时间节点为(任务:{位置:“2”)
再次感谢您的回复。
https://stackoverflow.com/questions/60370717
复制相似问题