2016-03-30 3 views
0

Ich versuche eine Abfrage für mein Diagramm zu finden, das ich von jqassistant erstellt habe. Aber ich kann es einfach nicht herausfinden. Meine Daten sieht wie folgt aus:Neo4j Cypher Abfrage mit Subselect

Ich habe mehrere Knoten, die ein Artefakt darstellt: (Jede Zeile ist ein Knoten)

 
name  version 
=================== 
projectOne  001 
projectTwo  001 
projectOne  002 
projectTwo  002 
projectOne  009 
projectOne  004 
projectOne  029 
projectTwo  003 
projectTwo  010 

Was meine Abfrage zurückgeben sollte, ist zwei Knoten:

 
projectOne 029 
projectTwo 010 

Also ich möchte die neueste Version dieses Knotens nach Namen unterscheiden. Ich weiß, wie man DISTINCT und ORDER BY benutzt, aber ich kann einfach nicht herausfinden, wie man diese beiden kombiniert, um die gewünschte Ausgabe zu erhalten. Irgendwelche Ideen?

Mein letztes Ziel ist es, die neuesten Versionen zu markieren. Dann möchte ich auf jedes neuere Artefakt hinweisen, das von Artefakten abhängt, die nicht als neu markiert sind.

Eine andere mögliche Lösung, um dies zu erreichen, wäre eine Kette von Vorgängern zu erstellen. Dann wäre jedes Artefakt ohne ankommenden Vorgänger die neueste Version. Aber das bedeutet dasselbe Problem wie bei der Auswahl der neuesten.

Antwort

2

Unter der Annahme, alle relevanten Knoten haben das Foo Label, ist die Abfrage sehr einfach:

MATCH (n:Foo) 
RETURN n.name, MAX(n.version); 

Die MAX Aggregationsfunktion die maximale Version für jeden einzelnen Namen findet.

+0

Oh. Sieht ganz einfach aus. Ich werde es später am Abend ausprobieren und die Antwort markieren, wenn es funktioniert. Danke im Voraus. – romixch

+0

Awsome! Vielen Dank! – romixch

+0

Schöne und einfache Lösung! Beachten Sie, dass dies nur funktioniert, wenn das Versionsattribut Ihrer Artefakte eine natürliche Reihenfolge erzeugt, d. H. Wenn Sie ein anderes Versionierungsschema wie 1.10.0 verwenden, können die Dinge brechen. –