Ответ 1
Неподтвержденный... дайте мне знать, если это сработает для вас:
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
Изменить: из-за недавних изменений в этом старом ответе... пожалуйста, рассмотрите более свежий запрос, написанный в эпоху 3.x с помощью команды collect/unind - также непроверенный (будьте осторожны, чтобы не делать этого, если количество 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