库存管理数据库

5
我正在开发一个股票管理应用程序,以下是场景描述:
- 用户输入已购买商品的以下信息(商品ID、购买数量、购买价格、最低售价、购买日期)
- 每次操作,用户输入已出售商品的以下信息(商品ID、出售数量、最终售价、交易日期)。每次操作我会提示用户是否存在比最低售价更低的最终售价。
- 每次操作中,我会记录交易的利润(最终售价-购买价格)。
问题是:同一产品在不同时间以不同价格购买,如何计算共同的利润呢?
例如,如果有以下情况:
已购买商品(T恤),10件,20英镑,23英镑,2012年8月10日
已购买商品(T恤),10件,22英镑,25英镑,2012年8月19日
在这种情况下,操作销售时我需要怎么做才能找到正确的购买价格并计算利润,并将正确的信息记录在销售表中?

只获取销售数量(在这里是T恤)的数据。价格会随时间而变化。 - FirmView
1个回答

6
在金融领域,计算利润/损失通常都是采用FIFO规则。
也就是说:买入10股,价格为$20,卖出5股,价格为$22,再买入5股,价格为$21,最后卖出10股,价格为$23。这些交易需要按照以下方式记录:
BUY 10 for $20 date1
BUY 5 for $21 date3

并且分别

SELL 5 @ $22 date2
SELL 10 @ $23 date4

现在你需要按照FIFO规则对它们进行配对,并将中间组合写入数据库:
portfolios AFTER date
date1  10  profit/loss $0     avg-open $20
date2  5   profit/loss +$10   avg-open $20
date3  10  protit/loss +$10   avg-open $20.50
date4  0   profit/loss +$35   avg-open $0

一步一步的操作:在date1之后,我们以平均开盘价20美元买入。从date1date2,我们卖出了一半的股票,赚了5 * ($22 - $20 <- avg-open) = $10的利润,并且在那次交易之后,还剩下5个证券,平均开盘价为20美元。从date2date3,我们进货了5个证券,利润/损失保持不变,但平均开盘价上涨到20.50美元(5个20美元+5个21美元)。最后,你以10 * ($23 - $20.50) = $25的利润率将它们全部出售,再加上之前的10美元,总共得到35美元。
总结一下,你可以记录单个交易(BUY/SELL),然后即时计算组合、平均开盘价和利润/损失。或者你可以存储组合以及迄今为止的利润/损失和逐步更新的平均开盘价。我建议不要同时做这两件事情(除了调试目的),因为这可能会给数据层带来不一致性,这是很麻烦的。如果你这样做了,请选择其中一个表示为主要表示,并在数据不一致时重新计算另一个表示。这只是一个建议。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接