Come trovare elementi correlati sulla base di una condizione come data minima in Neo4j?

voti
0

Ho un modello di dati dove abbiamo progetti e le tappe. Un progetto può avere molti traguardi. Mi piacerebbe elencare ogni progetto e il traguardo con la data minima.

In caso di:

project1 -> milestone1 {Data: '2019/01/01'}

project1 -> Milestone2 {Data: '2019/03/03'}

progetto2 -> milestone3 {Data: '2018/01/01'}

progetto2 -> milestone4 {Data: '2019/03/03'}

Lo voglio tornare

project1 -> milestone1 {Data: '2019/01/01'}

progetto2 -> milestone3 {Data: '2018/01/01'}

Ho provato un sacco di soluzioni folli dove ho calcolare le date minimi milestone, passare i min_dates utilizzando con, quindi abbinare sempre sulla base della data calcolata min, ma sembra wonky e non è affidabile.

È pubblicato 10/10/2019 alle 00:55
fonte dall'utente
In altre lingue...                            


2 risposte

voti
1

@ User3137190, questa è una versione succinta della vostra risposta:

MATCH (p:Project)-[:HAS_MILESTONE]->(m:Milestone)
WITH p, m ORDER BY p.name, m.date
RETURN p.name, COLLECT(m)[0].name
Risposto il 10/10/2019 a 02:24
fonte dall'utente

voti
0

Trovato la risposta in un posto estraneo. Non sapevo che potremmo usare ORDER BY in una con la clausola

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
Risposto il 10/10/2019 a 01:46
fonte dall'utente

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more