在密码中,return 关系中具有最新日期的节点 属性

In cypher, return node with latest date in relationship property

这是场景。我正在为一个住在一个或多个不同地点的人建模。关系中包括他们搬进来的开始日期(从纪元开始以毫秒表示)。

(:person{name:'bill'}) -[:livesAt {since:1111000}]->(:place{name:'apartmentA'})

(:person{name:'bill'}) -[:livesAt {since:2222000}]->(:place{name:'apartmentB'})

我想写一个查询,returns 与给定人的最近居住地对应的单一地点节点。最近的地方对应关系的'since'属性中的最大值。请注意,多个人可能住在一个给定的地方。

我正在尝试这样的事情:

MATCH (n:person {name: 'bill'})-[r:livesAt]->(m:place)
WITH r
ORDER BY r.since DESC
LIMIT 1
MATCH (n:person)-[r]->(o:place)
RETURN o.name

如果我的查询适用于上面的示例,我希望得到 'apartmentB' 作为结果。

问题(可能)位于最后一个匹配子句。我在 Neo4j SandBox 上测试了一个更简单的版本,看起来还不错:

MATCH (n:person {name: 'bill'})-[r:livesAt]->(m:place)
WITH n, m
ORDER BY r.since DESC
LIMIT 1
RETURN m.name as place, n.name as person

或者,您可以使用 max 子句获取关系的最大值,然后找到与最近居住地对应的节点。

MATCH (n:person {name: 'bill'})-[r:livesAt]->(:place)   
WITH max(r.since) as most_recent, n
MATCH (n)-[:livesAt {since: most_recent}]->(m:place)
RETURN m