有许多'User'节点,任何用户都可以向其他用户汇款。
(:User)-[r:SENT_MONEY]->(:User)
这里r有属性
- created_at = timestamp()
- money_transfers =汇款金额
如何在单个查询中找到一个用户最后一次向其他用户汇款或最后一次从其他用户收到的钱。
I have try this query
MATCH (from:User)-[r:SENT_MONEY]->(to:User)
where (id(from)=1234 OR id(to)=1234)
return max(r.created_at) as sent_at,
r.money_transferred as amount, from.username,to.username
order by last_amount_sent_at DESC
结果如下:
sent_at | amount | from.username | to.username
1408961056 | 20 | user1 | user2
1408961041 | 30 | user2 | user1
1408961028 | 50 | user1 | user3
1408951163 | 20 | user4 | user1
1408951140 | 10 | user1 | user4
通过此查询用户"user1"记录与"user2"one_answers"user4"出现两次。它应该单独显示用户之间的最后一次交易,例如
sent_at | amount | from.username | to.username
1408961056 | 20 | user1 | user2
1408961028 | 50 | user1 | user3
1408951163 | 20 | user4 | user1
满意,
这里有一个我认为可以满足你需要的查询。
MATCH (m:User {username : 'user1'})-[r:SENT_MONEY]-(n:User)
WITH m, n, collect(r) AS rs, max(r.created_at) AS p
WITH m, n, filter(x IN rs WHERE x.created_at = p) AS l
RETURN STARTNODE(l[0]), ENDNODE(l[0]), l[0]
对于每对用户,您收集事务并找到最后一个,然后返回最后一个事务的开始和结束节点。
恩典与平安,
吉姆在回答您的进一步问题时,您可以像这样修改查询(例如)以避免集合vs元素错误:
MATCH (m:User {username : 'user1'})-[r:SENT_MONEY]-(n:User)
WITH m, n, collect(r) AS rs, max(r.created_at) AS p
WITH m, n, filter(x IN rs WHERE x.created_at = p) AS o
RETURN m, n, o[0], (o[0]).money_transferred