MySQL选择记录总和

问题描述:

我正在使用MySQL和PHP。我有一个包含列ID和数量的表格。我想检索作为最后一笔数量总和的行的ID,因为它达到总数为40的数量。更具体。我在数据库中有3行。一个数量为10,一个数量为30,另一个数量为20.因此,如果我总结数量得到结果40,我将总结前两个女巫的意思是:10 + 30 = 40.这样,最后一个Id用于总和数字40是2.我只想知道用于完成总和40的最后一行的编号。MySQL选择记录总和

如果询问我会提供更多详细信息。谢谢!!


让我这样说: 我真的有6种产品在我的手。第一个来到我的拥有在10日,接下来的3来到11日和最后2来到12。

现在,我想卖我的股票3产品。并想按照他们来的顺序出售它们。因此,对于想要3种产品的顾客,我会向他推销来自10个产品和来自11个产品的产品11.

对于想要2种产品的下一个顾客,我会向他出售一种产品11的日期从3种产品的最后一个订单中保留,另一种从12中的另一种开始。

问题是,我将如何知道每个产品的售价?我认为,如果我能找出哪些行总计了每个请求的数量,我就知道每次我想发送订单时从哪里开始总和。所以首先我会看看哪些行总结了3种产品并保留条目ID。对于下一个订单,我将从该ID开始计数,然后总和,直到总结2个产品的第二个订单为止,依此类推。我认为这样,我可以跟踪每个产品的进货价格。因此,我不会按照使用第一价格所构成的价格从12日起销售产品。

我希望你能理解。我只需要知道什么价格有我的任何产品,所以我会知道,第一个产品将有一个价格,但随着产品价格上涨,我必须提高我的价格...因此,最后的产品必须出售更高的价格。我只能做到这一点,如果我跟踪这...

非常感谢。


没人?或者,更容易:MySQL应该为SUM选择所需的行(quantity),例如40或更高。然后给我参加总和过程的最后一行的ID。

我不太明白你的问题。你可以尝试更恰当地重新措词吗?从我的理解,这里是你的数据库的结构:

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查询,甚至添加一些代码为您完成一些工作来简化和简化您的工作。

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

所以你的表应该是这样的:

 
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 

过程中的每个记录,因为他们进来,店里的价格该记录,并坚持下去,只要你需要,直到你达到项目的数量,您需要。你应该得到一个项目清单,该级别的库存数量和该级别的价格。