12

我努力返回具有最大值的节点,并进一步处理该节点。

以下是我将如何返回具有最大值的节点:

START n=node(startnode)
MATCH n-[:TYPE]-m
RETURN m
ORDER BY m.value DESC LIMIT 1

但现在我在一个子查询中

START n=node(somenode)
MATCH n-[:TYPE1]-q
WITH DISTINCT q
MATCH q-[:TYPE2]-m

然后ORDER BY .. LIMIT 1显然不再起作用了,因为我想要每个q. 这是怎么做到的?

此外,一旦我m对每个我都拥有最大的价值,q我还需要处理它:

RETURN q, m.maxvalue, x.anothervalue

MATCH m-[:HAS_ONE_LINK_TO]->x

因此,虽然我一直在使用集合(collect(m)),但我还没有想出一种方法将它们扩展回“结果行”以应用它MATCH

4

1 回答 1

23

未经测试...让我知道它是否适合您:

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

编辑:由于最近对这个旧答案的支持...请考虑使用 collect/unwind 在 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
于 2013-07-19T15:07:45.527 回答