在密码中,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
这是场景。我正在为一个住在一个或多个不同地点的人建模。关系中包括他们搬进来的开始日期(从纪元开始以毫秒表示)。
(: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