mysql - 如何用MySql计算初始股票

标签 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 周的库存),其他周相同。

最佳答案

首先 - 您可以将查询写得更短:

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`

关于mysql - 如何用MySql计算初始股票,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33963129/

相关文章:

sql - 连接两个具有不同列数的表

java - 板对板拼字游戏

mysql - GROUP BY 一个特定的命令?

javascript - 如何执行日期范围以查看选定日期 Highcharts 中的数据

mysql - 如何正确地将 sql 数据导出到 .csv

php - 仅当 SQL 中有一个用户角色时才选择

python - 如何将Python Scrapy扩展中的数据插入到MySql数据库表中?

php - 为什么这个表格不起作用?

php - 将文件内容直接导入数据库 - Excel 电子表格需要修复

sql - 在部分字符串匹配上连接 PostgreSQL 中的两个表