Neo4j-按金额限制和按日期订购的退货
背景:Neo4j-按金额限制和按日期订购的退货,neo4j,cypher,Neo4j,Cypher,背景: 我和约翰和彼得排队,他们都想买450个苹果(数量=r.Amount) (队列位置由r.Created给出(更早的日期=更早/更低的队列位置) 我有鲍勃和琳达,他们都想卖苹果(他们都有r.Amount) (两个都有1000个苹果) 此处的测试控制台: 场景: 第一个场景:售出400个苹果(无论是谁售出) 第二个场景:售出1100个苹果(无论是谁售出) 需要: 两种情况下仅1个密码查询,仅更改 变量400或1100 第一个场景需要:只有John返回,因为他可以购买所有400个苹果
- 我和约翰和彼得排队,他们都想买450个苹果(数量=r.Amount)
(队列位置由r.Created给出(更早的日期=更早/更低的队列位置) - 我有鲍勃和琳达,他们都想卖苹果(他们都有r.Amount)
(两个都有1000个苹果) 此处的测试控制台:
- 第一个场景:售出400个苹果(无论是谁售出)
- 第二个场景:售出1100个苹果(无论是谁售出)
- 两种情况下仅1个密码查询,仅更改 变量400或1100
- 第一个场景需要:只有John返回,因为他可以购买所有400个苹果,并且因为他有第一个队列位置
- 第二 场景需求:两个(John和Peter)都返回,因为它们都是 需要购买1100个苹果或部分苹果
我的想法是这样的,但不是用1来限制它,而是用400或1100加上所有r.宣布的总和(r.金额),但我认为这是不可能的:
MATCH (Pe:Person)-[a:announces]-(Pr:Product)
RETURN Pe.name, a.Amount
ORDER BY a.Created ASC
LIMIT 1;
我有一个示例来演示我的答案(它还原Bob和Linda节点,但它们与Apple节点有销售
关系)。它还为买家的个人
节点添加了优先级
属性,以表示队列顺序
我的问题是:
MATCH (:Person)-[s:sells]-(pr:Product {name: 'Apples'})
WITH pr, SUM(s.Amount) AS nAvailable
MATCH (p:Person)-[a:announces]->(pr)
WITH nAvailable, {p: p, amt: a.Amount} AS pa
ORDER BY pa.p.priority
RETURN
REDUCE(s = {unsold: nAvailable, res: []}, x IN COLLECT(pa) |
CASE
WHEN s.unsold = 0 THEN s
WHEN x.amt <= s.unsold THEN {unsold: s.unsold-x.amt, res: s.res + {p: x.p, amt: x.amt}}
ELSE {unsold: 0, res: s.res + {p: x.p, amt: s.unsold}}
END
) AS result;
我有一个示例来演示我的答案(它还原Bob和Linda节点,但它们与Apple节点有销售
关系)。它还为买家的个人
节点添加了优先级
属性,以表示队列顺序
我的问题是:
MATCH (:Person)-[s:sells]-(pr:Product {name: 'Apples'})
WITH pr, SUM(s.Amount) AS nAvailable
MATCH (p:Person)-[a:announces]->(pr)
WITH nAvailable, {p: p, amt: a.Amount} AS pa
ORDER BY pa.p.priority
RETURN
REDUCE(s = {unsold: nAvailable, res: []}, x IN COLLECT(pa) |
CASE
WHEN s.unsold = 0 THEN s
WHEN x.amt <= s.unsold THEN {unsold: s.unsold-x.amt, res: s.res + {p: x.p, amt: x.amt}}
ELSE {unsold: 0, res: s.res + {p: x.p, amt: s.unsold}}
END
) AS result;
如果John和Peter每人只想买450个苹果,那么1100个苹果怎么能卖出去?另外,如果Bob和Linda都有1000个苹果要卖,是什么阻止了900个苹果被卖出去?在什么情况下,只有400个会被卖出去?Cypher查询的可变变量是待卖苹果的数量。它可以是450个,1100个,或者像你说的900个(作为第三种情况)…问题的需要是返回所需数量的买家,前提是所有潜在买家只能购买部分/部分苹果。因此,在您的问题中,“x苹果出售”应该是“x苹果出售”?另外,在您的测试控制台中,Bob和Linda与苹果有
购买
关系——他们不应该有出售
关系吗?我更新了测试控制台:并删除了Bob和Linda,因为这可能会带来混乱……回答您的问题:是的,x个苹果已经售出(无论谁出售)如果John和Peter每人只想买450个苹果,那么1100个苹果怎么能卖出去?另外,如果Bob和Linda都有1000个苹果要卖,是什么阻止了900个苹果被卖出去?在什么情况下,只有400个会被卖出去?Cypher查询的可变变量是待卖苹果的数量。它可以是450个,1100个,或者像你说的900个(作为第三种情况)…问题的需要是返回所需数量的买家,前提是所有潜在买家只能购买部分/部分苹果。因此,在您的问题中,“x苹果出售”应该是“x苹果出售”?另外,在您的测试控制台中,Bob和Linda与苹果有购买
关系——他们不应该有出售
关系吗?我更新了测试控制台:并删除了Bob和Linda,因为这可能会带来混乱……回答您的问题:是的,x个苹果已经售出(无论谁出售)感谢你的精彩回答,它回答了比最初的问题更多的问题…它需要解决一点,最后它帮助我们了解Cypher和Neo4j的可能性。感谢你的精彩回答,它回答了比最初的问题更多的问题…它需要解决一点,最后它帮助我们了解Cypher和Neo的可能性4j。