这是我的模型:
在SQL中,我会通过分组和排名来仅返回每个组中所需的n行,但我没有足够的经验使用COLLECT或UNWIND来实现同样的结果。
(:A)<--(:B)<-[:R {时间戳}]-(:C {数字})
我想在一个cypher查询中实现的目标是,根据给定的A和所有B节点的最新R.timestamp(或C.number),获取最新的C节点。也就是返回一个A,多个B以及与每个B相关的具有最高R.timestamp的一个C。最好还能返回没有与C相关的B节点。在SQL中,我会通过分组和排名来仅返回每个组中所需的n行,但我没有足够的经验使用COLLECT或UNWIND来实现同样的结果。
last()
函数。或者,可以根据顺序(DESC或ASC)玩一下,并将last()
替换为head()
。(参见https://neo4j.com/docs/developer-manual/current/#query-function)现在,这不会返回没有与C相关的B节点。我将调查并在此发布结果。 - RwanouMATCH (a:A {name: {param}})<--(b:B) with a, b OPTIONAL MATCH (c:C)-[r:R]->(b) // 忽略缺失的C WITH a, b, r, c ORDER BY r.end DESC WITH a, b, head(collect(c)) as most_recent_c, head(collect(r)) as most_recent_r RETURN a, b, most_recent_c, most_recent_r;
- Rwanou