在sql中实现FIFO(先进先出)

问题描述 投票:0回答:1

我有一张库存表

身份证 数量 购买日期 价格
11202 4 2023年1月1日 3
11202 3 2023年6月12日 7
5050 4 2023年10月11日 60
11202 4 2023年10月12日 5
5050 8 2023年12月12日 70

和售出商品表

身份证 数量
11202 6

我想实现先进先出的概念,我可以按如下方式找到总价 我在不同日期在[库存表]中购买了数量。我在表 [已售商品] 中已售出数量

假设我在我的案例项目“11202”中售出了 6 个特定商品的数量,我想通过乘以(购买数量 * 价格)//第一个订单然后乘以下一个订单来找到总价

4 * 3 = 12(第一笔订单日期为 01/01/2023)剩余库存 0

2 * 7 = 14(2023 年 12 月 6 日的第二笔订单)剩余库存 1

12 + 14 = 26 总价

我已经加入了看起来像这样的表格 joined table 但我不知道如何添加一个包含剩余商品和总价的新列

sql mysql fifo
1个回答
-1
投票

如果您想要每个条目的总价:

SELECT date, qty, sold_qty*price AS total FROM <joined_table> WHERE id = <id> ORDER BY date ASC;

如果您想要物品的总收入:

SELECT id, MIN(qty), SUM(sold_qty * price) AS total
FROM joined_table
GROUP BY id;

假设您的数量总是下降,如果您想要最新条目的数量,您应该使用子查询。

您应该将用于加入表格的代码替换为

joined_table

© www.soinside.com 2019 - 2024. All rights reserved.