mysql - MySQL 数据库中的 FIFO

标签 mysql fifo inventory

我正在使用 Mysql(不是 MSSQL)数据库,并遇到了一个我似乎无法解决的问题。我非常感谢您帮助寻找解决方案。 我想使用两个表创建一个 View ,如下所述:

1. product_in
product_code
received_time
received_amount

2. product_out
product_code
delivery_time
delivered_amount

“ View ”应提供以下内容:

product_code
received_time
received_amount
of_which_delivered

我的问题是product_out要管理第一个传入的数据(FIFO:先进先出),但是由于交付的数量或多于或少于接收的数量,我不知道如何计算“of_which_delivered”。

到目前为止,我成功地对传入数据进行了排序,并使用 SUM 对输出(已交付) cargo 进行了汇总。

SELECT 
      sn,
      product_code, 
      received_time, 
      received_amount,
      delivered_amount 
   FROM 
      ( SELECT 
              received_time, 
              received_amount, 
              @rend2 := If( @rend1 = product_code, @rend2 + 1, 1) as sn, 
              @rend1 := product_code AS product  
           FROM 
              product_in, 
              ( SELECT @rend1 := 0, @rend2 := 0 ) AS tt  
           ORDER BY 
              product_code, 
              received_time ) AS k 
         LEFT JOIN 
         ( SELECT  
                 product_code AS prdct, 
                 SUM(delivered_amount) AS delivered_amount 
              FROM 
                 product_out 
              GROUP BY 
                 product_code ) AS b 
            ON aru = product_code

我还没有成功创建循环,该循环可以分析输出金额是否大于或小于给定日期的接收金额,如果大于,则将差额添加到接收的金额中改天。

更准确地说,这是一个示例:

Product   Date    Qty
nr.1      Sep 2   500 
nr.1      Sep 3   300
nr1.      Sep 4   200 on the 4th. 

5日已发货900件。

在这种情况下,我们应该在 View 中看到以下内容:

Product  Action    Date    Qty
nr.1     received  Sep 2   500   (delivered all 500)
nr.1     received  Sep 3   300   (delivered all 300)
nr.1     received  Sep 4   200   (only 100 delivered)

我将非常感谢任何可以帮助我找到解决方案的人!

最佳答案

抱歉,没有为您调整查询,但是...过去使用过会计系统,您的数据库结构似乎缺乏更好地处理输入/输出 FIFO 方法(甚至是 LIFO)的能力。底层会计系统有一个所有收据的库存表(缩写)

Table: ItemTrans
ItemTransID   (auto-increment ID for any transaction)
ItemID        (item id of the inventory item)
Status        (status, such as In, Our or Inventory Adjustment)
Date          (date of the activity)
Qty           (quantity)
QtyUsed       (running total column as inventory was used up)

随着元素的出售或调整。销售详细信息表将显示数量用于哪个 ItemTrans 记录。因此,如果您手头有库存(如示例中那样),则销售订单详细信息行将显示 900。库存使用表将显示数量是从哪个特定 ItemTransID 分配的以及来自所述 block 的数量,从而显示您的库存实际产品发布的预期事件是在销售时。

这样,您就不必重新创建给定时间点的库存。只需查询销售订单详细信息以及从哪些项目中提取数据即可获取数据以及每个收据 block 中有多少个数据。

这简化了生成 COGS(销售成本)的过程,该过程将通过应收帐款(销售订单)事件等子日记帐报告给总账。

你们有能力对你们的数据库结构进行这样的调整吗?

关于mysql - MySQL 数据库中的 FIFO,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32865362/

相关文章:

php - 您将如何测试一个可以向查询添加数十个不同过滤器的类?

c - Fifo 从未创建

json - Ansible 中的自定义动态库存脚本/插件

mysql - if else 语句用于金额、订单、分组元素 sql、mysql

mysql - Ajax POST/GET 安全性

进程间通信——pipe和fifo

c++ - 我应该为 FIFO 使用哪个 STL 容器?

java - 如何获取库存中单击的项目的名称

php - 自动递增文件名 PHP/MySQL

mysql - 我怎样才能做相反的键来加入或反转相反的输出