我很难返回具有最大值的节点,并进一步处理该节点.
这是我如何返回具有最大值的节点:
START n=node(startnode)
MATCH n-[:TYPE]-m
RETURN m
ORDER BY m.value DESC LIMIT 1
Run Code Online (Sandbox Code Playgroud)
但现在我在子查询中
START n=node(somenode)
MATCH n-[:TYPE1]-q
WITH DISTINCT q
MATCH q-[:TYPE2]-m
Run Code Online (Sandbox Code Playgroud)
然后ORDER BY .. LIMIT 1显然不再起作用了,因为我想要一个结果q.这是怎么做到的?
此外,一旦我拥有m最大值,q我也需要处理它:
RETURN q, m.maxvalue, x.anothervalue
Run Code Online (Sandbox Code Playgroud)
从
MATCH m-[:HAS_ONE_LINK_TO]->x
Run Code Online (Sandbox Code Playgroud)
因此,虽然我一直在玩集合(collect(m)),但我还没有找到一种方法将它们扩展回"结果行"以应用它MATCH.
Eve*_*man 22
未经测试...让我知道它是否适合您:
START n=node(somenode)
MATCH n-[:TYPE1]-q // initial query
WITH DISTINCT q
MATCH q-[:TYPE2]-m
WITH q, max(m.value) as max // get max for q
MATCH q-[:TYPE2]-m
WHERE m.value = max // find the max m for each q
WITH q, m
MATCH m-[:HAS_ONE_LINK_TO]->x // find x from m
RETURN q, m, x
Run Code Online (Sandbox Code Playgroud)
编辑:由于最近对这个旧答案的赞成...请考虑使用收集/展开在3.x时代编写的更新鲜的查询 - 也未经测试(如果ms的数量非常大,请注意不要这样做,如它们可能存储在查询的部分结果中,而不是能够流式传输它们):
MATCH (n:Label)-[:TYPE1]-(q) // initial query
WITH DISTINCT q
MATCH (q)-[:TYPE2]-(m)
WITH q, max(m.value) as max, collect(m) as ms // get max for q, collect ms
UNWIND ms as m
WHERE m.value = max
MATCH (m)-[:HAS_ONE_LINK_TO]->(x) // find x from m
RETURN q, m, x
Run Code Online (Sandbox Code Playgroud)