Как найти связанные предметы, основанные на условии, как минимальная дата в Neo4j? - PullRequest
0 голосов
/ 10 октября 2019

У меня есть модель данных, в которой у нас есть проекты и этапы. Один проект может иметь много этапов. Я хотел бы перечислить каждый проект и этап с минимальной датой.

В случае:

project1 -> milestone1 {date: '2019-01-01'}

project1 -> milestone2 {date: '2019-3-03'}

project2 -> milestone3 {date: '2018-01-01'}

project2 -> milestone4 {date: '2019-03-03'}

Я хочу, чтобы он вернул

project1 -> milestone1 {date: '2019-01-01'}

project2 -> milestone3 {date: '2018-01-01'}

Я испробовал несколько сумасшедших решений, где я вычисляю минимальные даты вех, передайте min_dates, используя «с», затем снова сопоставьте на основе рассчитанной минимальной даты, но это кажется сомнительным и ненадежным.

Ответы [ 2 ]

1 голос
/ 10 октября 2019

@ user3137190, это краткая версия вашего ответа:

MATCH (p:Project)-[:HAS_MILESTONE]->(m:Milestone)
WITH p, m ORDER BY p.name, m.date
RETURN p.name, COLLECT(m)[0].name
0 голосов
/ 10 октября 2019

Нашел ответ в несвязанном посте. Я не знал, что мы можем использовать order by в предложении with

match (p:Project)-[:HAS_MILESTONE]-(m:Milestone)
with p, m order by p.name, m.date
with p, collect(m) as milestones
with p, milestones[0] as first_milestone
return p.name, first_milestone.name
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...