【发布时间】:2014-09-22 14:33:08
【问题描述】:
我有两张表格,一张用于输入库存,一张用于输出库存,它们或多或少看起来像这样:
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
--------------+----------+-------------+------------+-----------+-----------+----------
我可以处理所售商品的总价格和平均成本,但是 FIFO 和 LIFO 查询让我感到很头疼。
这合理甚至可能吗?任何帮助将不胜感激。
【问题讨论】:
-
如何解决这个问题实际上取决于何时填充表。是否正在更新购买和销售,以便按时间顺序添加每一行?它们是否已经填充并且齿轮数据是事后的?
-
销售和购买表只是附加到最后,最近的。所以如果我现在再买一个泡泡球,它将成为购买表的最后一行。我描绘商品成本计算的方式是将其定义为视图,因此当您从中选择时,计算会即时发生。
标签: sql postgresql accounting