2017-09-25 4 views
1

Je dois retourner les résultats de requête distincts sur 2 champs. bien ce travail de recherche et fait ce que j'ai besoin:return distinct + max dans la même requête

match(a:Assembly) 
where a.SourceLocation = "" 
match (a)<-[r:REFERENCES{Type: "DLL"}]-(b:Assembly) 
return distinct a.Name,r.HintPath 

Maintenant je dois ajouter un autre champ au résultat. Comme il est une agrégation, je renvoie simplement l'entrée max

match(a:Assembly) 
where a.SourceLocation = "" 
match (a)<-[r:REFERENCES{Type: "DLL"}]-(b:Assembly) 
return distinct (a.Name,r.HintPath),max(b.SourceLocation) 

maintenant, le code ci-dessus fonctionne pas (mauvaise syntaxe). En d'autres termes, j'ai besoin de pour sélectionner distinct (ou grouper par en sql) les 2 premiers champs combinés, et l'entrée max du 3ème champ.

quel est l'équivalent dans Cypher?

+0

Veuillez ajouter un exemple de fichier et le résultat attendu. Merci! –

Répondre

1

Dans Cypher, vous pouvez obtenir la valeur maximale d'une colonne en utilisant WITH -> ORDER BY -> COLLECT()[0]. Vous pouvez également collecter des valeurs dans une carte à l'aide de la syntaxe de la carte {key1:value1, key2:value2}. Voici votre requête en utilisant la syntaxe mentionnée.

match(a:Assembly) 
where a.SourceLocation = "" 
match (a)<-[r:REFERENCES{Type: "DLL"}]-(b:Assembly) 
with a, r, b 
ORDER BY b.SourceLocation DESC 
return distinct {Name: a.Name,Hint: r.HintPath} as source, COLLECT(b.SourceLocation)[0] as location 
+0

merci! cette technique de cartographie est ce qui me manquait. –