我有一个数据模型,我们有项目和里程碑。一个项目可以有许多里程碑。我想列出每个项目和里程碑的最短日期。
在以下情况下:
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'}
我尝试了一堆疯狂的解决方案,我计算最小里程碑日期,使用"with"传递min_dates,然后根据计算的最小日期再次匹配,但它似乎不稳定且不可靠。
>@user3137190,这是您答案的简洁版本:
MATCH (p:Project)-[:HAS_MILESTONE]->(m:Milestone)
WITH p, m ORDER BY p.name, m.date
RETURN p.name, COLLECT(m)[0].name
在一个不相关的帖子中找到了答案。我不知道我们可以在 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