繁体   English   中英

MySQL选择汇总记录

[英]MySQL select records that sums

我正在使用MySQL和PHP。 我有一个包含列ID和数量的表。 我想检索的行的id是最后一个求和数量,因为它的总和达到40。 更加具体。 我在数据库中有3行。 一个有数量10,一个有数量30,一个有数量20。因此,如果我对数量求和得出结果40,我将对前两个女巫求和:10 + 30 =40。这样,最后一个Id用于将数字40求和为2。我只想知道用于完成40的总和的最后一行的ID。

如果需要,我将提供更多详细信息。 谢谢!!


让我这样说:我手上确实有6种产品。 第一个是我在10日的财产,第二个是在11日的财产,第二个是12的财产。

现在,我想从库存中出售3种产品。 并希望按照订购的顺序出售它们。 因此,对于需要3种产品的客户,我将向他出售10种产品和11种产品中的2种。

对于下一个想要2种产品的客户,我将向他出售11种产品,从11种日期开始,剩下的最后3种产品,再从12种产品中购买。

问题是我如何知道我出售的每种产品的价格? 我以为,如果我可以找出每行要求的数量总和是哪几行,那么每次我要交付订单时,我就会知道从何处开始总和。 因此,首先,我将查看哪些行总计3种产品,并保留条目ID。 对于下一个订单,我将从该ID开始计数并求和,直到将两个产品的第二个订单求和,依此类推。 我认为通过这种方式,我可以跟踪每种产品的进货价格。 因此,从12月起我将不会以使用最初价格构成的价格出售产品。

我希望你明白。 我只需要知道我的产品的价格是多少,就可以知道第一个产品的价格是多少,但是随着产品价格的上涨,我也必须提高价格...因此,最后出售的产品必须以更高的价格。 我只有跟踪这一点,才能实现这一目标。

非常感谢你。


没有人 ? 或者,甚至更简单:例如,MySQL应该为SUM( quantity )选择所需的行,使其大于或等于40。 然后让我获取参与加法处理的最后一行的ID。

第三列具有总计。 然后,您可以简单地返回运行总计<=您的目标值的最后一行。

因此您的表应如下所示:

ID    Quantity    RunningTotal
1           10              10
2           30              40
3           20              60

注意:如果删除表中的一行,请记住更新所有后续行RunningTotal -= DeletedRow.Quantity

依靠表ID可能不是一个好主意,但是如果确实如此,则可以尝试如下操作(未经测试):

SELECT yourTableA.id
  FROM yourTable AS yourTableA
  JOIN yourTable AS yourTableB
 WHERE ( yourTableA.value + yourTableB.value ) = 40
   AND yourTableA.id != yourTableB.id
 ORDER BY yourTableA.id

仅当您期望只需要两行才能等于目标总和时,这种类型的解决方案才有效。 既然不是这种情况,那么最好的选择就是尝试获取所有行并以编程方式对返回的数据执行此操作。

lc发布的Running Total解决方案也是一个不错的选择,尽管除非绝对必要,否则我通常会尽量避免存储计算的数据。


根据此请求的更新信息,我有一个替代答案。

听起来好像您不太在乎库存。 您更关心产品何时推出。

SELECT *
  FROM product
 ORDER BY product.receivedData

处理每条记录后,存储该记录的价格,并根据需要持续存储直到您需要的项目数量。 您应该最终获得项目清单,该级别的库存数量和该级别的价格。

我不太了解您的问题。 您可以尝试更适当地改写吗? 根据我的解释,这是数据库的结构:

ProductID    ArrivalDate
   1          10
   2          11
   3          11
   4          11
   5          12
   6          12

现在,你问,“我怎么会知道哪个价位有每个产品我卖”? 哪种排序方式使我感到困惑,因为数据库中的每个值都没有价格属性。 您的数据库不应如下所示:

ProductID    ArrivalDate    Price
   1          10              100
   2          11              200
   3          11              300
   4          11              300
   5          12              400
   6          12              400

就我个人而言,我认为您的想法以找出出售的价格是有缺陷的。 向数据库中添加更多字段会更有意义:

ProductID    ArrivalDate    Price     InStock   DateSold
   1          10              100       Yes        17
   2          11              200       Yes        17
   3          11              300       Yes        18
   4          11              300       Yes        18
   5          12              400       no        
   6          12              400       no        

在更改数据库时,您可以轻松地跟踪产品何时到达,销售日期,价格甚至数量(我无法确定其是否为实际字段)。

此外,通过分离sql查询,甚至添加一些代码来为您完成一些工作,您可以简化并简化您的工作。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM