gpt4 book ai didi

neo4j - 基于两个节点neo4j获取不同的值

转载 作者:行者123 更新时间:2023-12-01 09:59:12 25 4
gpt4 key购买 nike

有许多“用户”节点,任何用户都可以向其他用户汇款。

(:User)-[r:SENT_MONEY]->(:User)

这里r有属性

  • created_at = timestamp()
  • money_transferred = 转账金额

我如何在单个查询中找到一个用户最后一次汇款给其他用户或最后一次从其他用户那里收到钱。

我试过这个查询

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”和“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]

对于每对用户,您收集交易并找到最后一个,然后返回最后一个交易的开始和结束节点。

恩典与平安,

吉姆

在回答您的进一步问题时,您可以像这样修改查询(例如)以避免集合与元素错误:

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

关于neo4j - 基于两个节点neo4j获取不同的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25486825/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com