Sql 计算销售商品的成本

Sql 计算销售商品的成本,sql,postgresql,accounting,Sql,Postgresql,Accounting,我有两个表,一个用于输入库存,另一个用于输出库存,大致如下所示: purchase (incoming) --------------+----------+-------+----------- inventory_id | quantity | price | timestamp --------------+----------+-------+----------- bobble | 1 | $1.00 | 2014-01-0

我有两个表,一个用于输入库存,另一个用于输出库存,大致如下所示:

               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
--------------+----------+-------+-----------
                             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
--------------+----------+-------------+------------+-----------+-----------+----------
我希望有一个这样的视图:

               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
--------------+----------+-------+-----------
                             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
--------------+----------+-------------+------------+-----------+-----------+----------
我可以处理销售商品的总价格和平均成本,但先进先出和后进先出的查询让我感到痛苦


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

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

如何解决这一问题实际上取决于何时填充表。采购和销售是否正在更新,以便按时间顺序添加每一行?它们是否已经填充并且cogs数据在事实之后?sale和purchase表只是附加在后面,最新的在末尾。因此,如果我现在再买一个筒子,它将成为购买表的最后一行。我描述货物成本计算的方式是,它将被定义为一个视图,因此当您从中选择时,计算将在运行中进行。