使用fifo动态cte的mysql中的django复杂子查询

0s7z1bwu  于 2021-06-21  发布在  Mysql
关注(0)|答案(0)|浏览(242)

我有三张table:
第一张table:(购买)

date (mm-dd)    quantity   p_id
    05-05          3         1
    05-06          2         1

第二张表:(销售)

date (mm-dd)    quantity   p_id
    05-07          1         1

第三个表:(过期)

date (mm-dd)    quantity   p_id
    05-08          4         1

现在我想要的是获得过期产品的详细信息,如:
购买过期产品的时间(fifo)
先购买的产品将首先过期/销售。
输出应为:

purchase_date      expired_date      quantity    p_id
  05-05               05-08             2         1
  05-06               05-08             2         1

解释,

商店总共有 5 产品 05-06p_id : 1 ,
接着
05-07 1 售出数量 p_id : 1 i、 e.收到的产品 05-05 先按先进先出法销售
所以现在我们的产品是:(仅用于可视化)

date (mm-dd)    quantity   p_id
    05-05          2         1   -its 1 quantity is sold
    05-06          2         1

则到期日为 05-08 ,过期产品为:(byfifo)

purchase_date      expired_date      quantity   p_id
  05-05               05-08             2         1
  05-06               05-08             2         1

即。 2 的产品 05-05 已经过期并且 205-06 我现在要实现的逻辑是:
所有附加事务:

date (mm-dd)    quantity   p_id    expired
    05-05          3         1      False
    05-06          2         1      False
    05-07         -1         1      False
    05-08         -4         1      True

附加所有事务如下:(如上所示)
设置数量 sell 以及 expiry 是阴性,是阴性 expired 变量, True 仅当其到期交易
算法:(使用deque push pop概念,到期时记录)
每组 p_id 交易:
初始化 deque (空)
对于每个事务(所有附加事务)
如果数量为正,则推入deque
要不然,爸爸,
如果没有弹出跳过(因为卖出可以多于买入)
否则,如果过期为假,即是卖出交易,
直到卖出价和卖出价之差大于等于零
否则,这是一个浪费条目
弹出,直到差异大于等于零,也记录每个弹出的差异

  • 当差异大于或等于零表示买入数量大于卖出数量时,我停止,因为卖出数量为负数,请考虑:
bought = 2
sold = -4
diff = 2-4 = -2
therefore we need to loop for next purchase until diff >= 0

实际上,目前我正在做的是从我的 RDBMS 变成Pandas dataframe 然后应用一些东西,很明显这是不可维护的,我想在数据库内部做它,因为数据库是优化的,我想做一个复杂的
MySQL query 那确实有点 sub-queries 给我想要的结果。
当销售是,我有不同的东西在进行,所以我想最低负荷的时间。
基本上发生的是:
一个商店购买产品,购买条目,
一家商店销售产品,销售条目,
商店告知此产品已过期,则会输入过期条目

  • 他们之间没有关系。

我也在用 Django Querysets ,以获取数据,所以如果我可以使用,这将是很大的帮助!
我也愿意做出改变或使用完全不同的工具来实现这些目标。

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题