如何使用MySql计算初始库存

时间:2015-11-27 18:35:59

标签: mysql sql

我正试图找到一种方法来计算初始库存的周数。 我已经设法通过此请求在第10周和第20周之间计算出“进入”和“出去”。

有人可以向我提供计算最终库存和初始库存的完整请求。

SELECT 
      `week` ,
       SUM(case
         when  `week` between 10 AND 20 and `etat` =1
         then 1
         else 0
       end) AS inn
       ,
       SUM(case
         when `week` between 10 AND 20   and `etat` =2
         then 1
         else 0
       end)  AS out

       FROM fait_stock f
       where 1=1
       group by `week` 
       having `week` between 10 AND 20 

修改

我想计算前几周的库存(初始库存,即周数<10),例如第10周,我有5周。第11周它应该是5+(第11周的库存)。第12周它应该是5+(第11周的库存)+(第12周的库存)与其他周相同。

1 个答案:

答案 0 :(得分:0)

首先 - 您可以更短地编写查询:

SELECT 
    `week` ,
    SUM(IF(`etat`=1, 1, 0)) AS inn,
    SUM(IF(`etat`=2, 1, 0)) AS `out`
FROM fait_stock
WHERE `week` BETWEEN 10 AND 20
GROUP BY `week`

如果你现在自己加入它(如果你想要几周的总和<10),你可以计算小于或等于给定周的所有星期的总和:

SELECT f1.`week`, SUM(f2.inn) AS inn, SUM(f2.`out`) AS `out`
FROM (
    SELECT 
        `week` ,
        SUM(IF(`etat`=1, 1, 0)) AS inn,
        SUM(IF(`etat`=2, 1, 0)) AS `out`
    FROM fait_stock
    WHERE `week` BETWEEN 10 AND 20
    GROUP BY `week`
) AS f1
JOIN (
    SELECT 
        `week` ,
        SUM(IF(`etat`=1, 1, 0)) AS inn,
        SUM(IF(`etat`=2, 1, 0)) AS `out`
    FROM fait_stock
    WHERE `week` BETWEEN 1 AND 20
    GROUP BY `week`
) AS f2 ON f2.`week` <= f1.`week`
GROUP BY f1.`week`