我有6000件存货,库存被分成了两个批次,一个包含4000件,另一个包含2000件。
基于销售订单,我正在尝试预测哪个批次的存货将履行每个订单。
比如:
SELECT product, order_qty, price, date_required FROM orders Where product = 'X'
这将生成以下表格:
product | order_qty | price | date_required
------------------------------------------------------
X | 300 | 1.01 | 01/07/2018
X | 500 | 1.00 | 03/07/2018
X | 700 | 1.05 | 02/07/2018
X | 1000 | 1.00 | 01/08/2018
X | 2000 | 1.00 | 20/07/2018
X | 600 | 1.06 | 10/07/2018
X | 500 | 1.10 | 11/07/2018
X | 400 | 1.00 | 10/08/2018
然后我有另一个例子:
SELECT batch, product, qty, date_received FROM batches where product = 'X'
这将产生一个表格,类似于这样:
batch |product| qty | date_received
-------------------------------------------
ABC123 | X | 2000 | 01/04/2018
987ZYX | X | 4000 | 01/01/2018
使用这两个表,我想预测哪一批库存订单会被取走。库存采用FIFO系统,因此根据表格,它必须先使用批次代码为987ZYX的批次来履行订单。我正在寻找一个查询将其作为表格呈现:
product | order_qty | price | date_required| batch
------------------------------------------------------------------
X | 300 | 1.01 | 01/07/2018 | 987ZYX
X | 500 | 1.00 | 03/07/2018 | 987ZYX
X | 700 | 1.05 | 02/07/2018 | 987ZYX
X | 1000 | 1.00 | 01/08/2018 | ABC123
X | 2000 | 1.00 | 20/07/2018 | 987ZYX & ABC123
X | 600 | 1.06 | 10/07/2018 | 987ZYX
X | 500 | 1.10 | 11/07/2018 | 987ZYX
X | 400 | 1.00 | 10/08/2018 | ABC123
我已根据所需日期选择上述批次,例如第一个需要的订单是1/7/18,这将从987ZYX批次中移除300件,然后我按此方法继续,直到必须完成来自下一批次的订单。
我知道可以使用SUM over方法,但如何确保它不使用比批次中可用的库存更多的库存呢?如上所示,如果需要从两个批次中履行,则尽可能显示两个批次。