2016-03-30 4 views
0

Я пытаюсь найти запрос для моего графика, который я создал jqassistant. Но я просто не могу понять. Мои данные выглядит следующим образом:Neo4j Cypher query with sub select

У меня есть несколько узлов, представляющих собой артефакт: (Каждая строка представляет собой узел)

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

Что мой запрос должен возвращать в два узла:

 
projectOne 029 
projectTwo 010 

Я хотите, чтобы новая версия этих узлов отличалась по имени. Я знаю, как использовать DISTINCT и ORDER BY, но я просто не могу понять, как объединить эти два, чтобы получить желаемый результат. Есть идеи?

Моя конечная цель - отметить новейшие версии. Затем я хочу указать каждый новейший артефакт, который зависит от артефактов, которые не отмечены как самые новые.

Другим возможным решением для достижения этой цели было бы создание цепочки предшественников. Тогда любой артефакт без входящего предшественника будет последней версией. Но это подразумевает ту же проблему, что и я, с выбором самых новых.

ответ

2

Если предположить, что все соответствующие узлы имеют Foo метку, запрос очень прост:

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

MAX функция агрегирования находит максимальную версию для каждого отдельного имени.

+0

Ох. Выглядит довольно легко. Я попробую это позже вечером и пометьте ответ, если он сработает. Заранее спасибо. – romixch

+0

Awsome! благодаря! – romixch

+0

Хорошее и простое решение! Обратите внимание, что это работает только в том случае, если атрибут версии ваших артефактов создает естественный порядок, т. Е. Если вы используете другую схему управления версиями, например, 1.10.0, все может сломаться. –