我正试图找到一种方法来计算初始库存的周数。 我已经设法通过此请求在第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周的库存)与其他周相同。
答案 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`