Como encontrar itens relacionados com base em uma condição como a data mínima em Neo4j?

votos
0

Eu tenho um modelo de dados onde temos projetos e metas. Um projeto pode ter muitos marcos. Eu gostaria de listar cada projeto e o marco com a data mínima.

No caso de:

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

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

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

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

Eu quero que ele retorne

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

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

Eu tentei um monte de soluções malucas onde eu calcular as datas mínimos marco, passar os min_dates usando com, em seguida, corresponder novamente com base na data min calculado, mas parece instável e não é confiável.

Publicado 10/10/2019 em 00:55
fonte usuário
Em outras línguas...                            


2 respostas

votos
1

@ User3137190, esta é uma versão sucinta de sua resposta:

MATCH (p:Project)-[:HAS_MILESTONE]->(m:Milestone)
WITH p, m ORDER BY p.name, m.date
RETURN p.name, COLLECT(m)[0].name
Respondeu 10/10/2019 em 02:24
fonte usuário

votos
0

Encontrou a resposta numa mensagem não relacionado. Eu não sabia que poderíamos utilizar ORDER BY em um com a cláusula

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
Respondeu 10/10/2019 em 01:46
fonte usuário

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