计算已售货物的成本

zak*_*akm 5 sql postgresql accounting

我有两个表,一个用于传入库存,另一个用于传出库存,看起来或多或少像这样:

               purchase (incoming)
--------------+----------+-------+-----------
 inventory_id | quantity | price | timestamp 
--------------+----------+-------+-----------
 bobble       |        1 | $1.00 | 2014-01-01
 trinket      |        2 | $1.00 | 2014-01-02
 trinket      |        2 | $2.00 | 2014-01-03
--------------+----------+-------+-----------


               sale (outgoing)
--------------+----------+-------+-----------
 inventory_id | quantity | price | timestamp
--------------+----------+-------+-----------
 trinket      |        1 | $3.00 | 2014-01-04
 bobble       |        1 | $3.00 | 2014-01-05
 trinket      |        2 | $3.00 | 2014-01-06
 trinket      |        1 | $3.00 | 2014-01-07
--------------+----------+-------+-----------
Run Code Online (Sandbox Code Playgroud)

我希望有一个看起来像这样的视图:

                             sale_with_cost_of_goods
--------------+----------+-------------+------------+-----------+-----------+----------
 inventory_id | quantity | total_price | timestamp  | cogs_fifo | cogs_lifo | cogs_avg 
--------------+----------+-------------+------------+-----------+-----------+----------
 trinket      |        1 |       $3.00 | 2014-01-04 |     $1.00 |     $2.00 |    $1.50 
 bobble       |        1 |       $3.00 | 2014-01-05 |     $1.00 |     $1.00 |    $1.00 
 trinket      |        2 |       $6.00 | 2014-01-06 |     $3.00 |     $3.00 |    $3.00
 trinket      |        1 |       $3.00 | 2014-01-07 |     $2.00 |     $1.00 |    $1.50
--------------+----------+-------------+------------+-----------+-----------+----------
Run Code Online (Sandbox Code Playgroud)

我可以处理所售商品的总价格和平均成本,但FIFO和LIFO查询在我痛苦的地方踢我.

这是合理的还是可能的?任何帮助将不胜感激.

小智 2

当客户从标准成本核算转向库存先进先出成本核算时,我遇到了类似的问题。我的解决方案是: 1. 在采购表中添加“剩余数量”列 2. 在销售表中添加“COGS”列 3. 修改销售订单发货模块中的代码,以根据最旧的数据计算 COGS采购剩余数量(有时多于一行),同时相应减少剩余数量。然后查询变得简单,因为所有数据都位于销售表中。