2013-07-19 17 views
10

Faccio fatica a restituire il nodo con il valore più grande e ad elaborare ulteriormente quel nodo.subquery di cypher: ottiene il nodo con il valore max/min e lo elabora.

Ecco come mi piacerebbe ritornare un nodo con il valore più grande:

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

ma ora sono in una sottoquery

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

e poi il ORDER BY .. LIMIT 1, ovviamente, non funziona più perché voglio un risultato per ogni q. Come è fatto?

Inoltre, una volta che ho la m con il più grande valore per ogni q Sarò anche bisogno di elaborarlo:

RETURN q, m.maxvalue, x.anothervalue 

da

MATCH m-[:HAS_ONE_LINK_TO]->x 

Così, mentre ho giocato con le collezioni (collect(m)), non ho trovato un modo per espanderli nuovamente a "righe risultato" per applicare tale MATCH.

risposta

20

testato ... fatemi sapere se funziona per voi:

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 

Edit: a causa dei recenti upvotes su questa vecchia risposta ... perche una query più fresco scritto in un'epoca 3.x utilizzando raccogliere/rilassarsi - anche testato (fare attenzione a non farlo se il numero di ms sarà abbastanza grande, in quanto possono essere memorizzati nel risultato parziale della query invece di essere in grado di trasmettere loro):

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 
+0

funziona come un fascino signor dio cypher! – bebbi

+1

Ho risposto alla tua domanda [molto più difficile], principalmente a causa di questo commento. : P –

+0

Funziona così tanto quanto necessario !! Molte grazie! – Vnge

Problemi correlati