【发布时间】:2017-02-01 11:12:50
【问题描述】:
在我的 Neo4j/Spring Data Neo4j 4 项目中,我有一个实体:Product
每个 Product 都有一个 Integer 属性 - price
例如,我有以下产品的价格:
Product1.price = 100
Product2.price = 305
Product3.price = 10000
Product4.price = 1000
Product5.price = 220
产品之间没有关系。
我需要根据初始价格值(Cypher 查询参数)找到一组通过最大价格增量(Cypher 查询参数)相互区分的产品(路径)。
例如,我需要在 Neo4j 数据库中查找从 price = 50 和 price delta = 150 开始的所有产品。作为输出,我希望得到以下产品:
Product1.price = 100
Product5.price = 220
Product2.price = 305
计算如下:
起始价格 = 50,因此第一个产品的价格应不低于 50 且不高于 200(50+150)。因此,基于此,我们从目录中找到了价格 = 100 的产品。第二个产品的价格应不低于 100 且不超过 250(100+150).. 这个产品的价格 = 220..第三个价格不低于220不超过370。这是价格= 305的产品
能否请您显示一个可以找到此类产品的 Cypher 查询。
【问题讨论】:
-
您能否说明价格和价格增量如何影响您的计算?我的假设是你想从价格开始,delta 会给你一个价格的下限和上限 -/+ delta,但这意味着上限是 200 (50 + 150)。你输出的价格超过了这个,所以我的假设是错误的,但我不知道你想使用什么计算。
-
类似的东西? WITH 50 AS initPrice, 150 AS delta WITH CASE WHEN (initPrice-delta) > 0 THEN (initPrice-delta) ELSE 0 END AS lowRange, (initPrice+delta) AS highRange MATCH (n:Product) WHERE lowRange
-
这似乎符合我的假设,但您的示例输出中的价格值不符合该公式(220 和 305 的价格都高于计算的 200 限制)。如果这只是您的示例输出中的一个问题,您能否修复它以避免混淆?
-
感谢您的回答 - 我用详细的计算算法更新了我的问题
-
谢谢,添加的细节使这一点更加清晰。