Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/83.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 按项目和周列出的运行总计_Mysql_Sql_Cumulative Sum - Fatal编程技术网

Mysql 按项目和周列出的运行总计

Mysql 按项目和周列出的运行总计,mysql,sql,cumulative-sum,Mysql,Sql,Cumulative Sum,我试图在每个工作周结束时确定每种产品的库存水平 我有一个记录所有产品交易的表 +------------+-------------+------------+------------+ | ProductID | Quantity | Created_at |Cause | +------------+-------------+------------+------------+ | 1 | 200 | 2015-06-01 |Deliv

我试图在每个工作周结束时确定每种产品的库存水平

我有一个记录所有产品交易的表

+------------+-------------+------------+------------+
| ProductID  | Quantity    | Created_at |Cause       |
+------------+-------------+------------+------------+
|          1 | 200         | 2015-06-01 |Delivery    |
|          1 | -2          | 2015-06-02 |Order       |
|          1 | -1          | 2015-06-12 |Order       |
|          2 | 45          | 2015-06-15 |Delivery    |
|          2 | -5          | 2015-06-16 |Order       |
|          2 | -1          | 2015-06-17 |Broken      |
|          1 | 100         | 2015-06-21 |Delivery    |
+------------+-------------+------------+------------+
我只需要按产品将数量加总到特定日期,以显示类似的内容

+------------+-------------+------------+
| ProductID  | Quantity    | Week       |
+------------+-------------+------------+
|          1 | 198         | 2015-06-05 |
|          1 | 197         | 2015-06-12 |
|          1 | 197         | 2015-06-19 |
|          2 | 39          | 2015-06-19 |
|          1 | 297         | 2015-06-26 |
|          2 | 39          | 2015-06-26 |
+------------+-------------+------------+
我已经尝试了使用Rollup和@runtot:= 但到目前为止还没有成功

所以,类似于:

DROP TABLE IF EXISTS my_table;

CREATE TABLE my_table
(product_id INT NOT NULL
,created_at DATE NOT NULL 
,quantity INT NOT NULL
,cause  VARCHAR(20) NOT NULL
,PRIMARY KEY(product_id,created_at)
);

INSERT INTO my_table VALUES
(1,'2015-06-01',200,'Delivery'),
(1,'2015-06-02', -2,'Order'),
(1,'2015-06-12', -1,'Order'),
(2,'2015-06-15', 45,'Delivery'),
(2,'2015-06-16', -5,'Order'),
(2,'2015-06-17', -1,'Broken'),
(1,'2015-06-21',100,'Delivery');

SELECT x.*
     , CASE WHEN @prev = product_id THEN @i:=@i+total ELSE @i:=total END running
     , @prev:=product_id prev 
  FROM 
     ( SELECT product_id
            , YEARWEEK(created_at) yw
            , SUM(quantity) total 
         FROM my_table
        GROUP 
           BY product_id
            , yw
     ) x
     , (SELECT @prev:=null,@i:=0) vars 
 ORDER 
    BY product_id
     , yw;
+------------+--------+-------+---------+------+
| product_id | yw     | total | running | prev |
+------------+--------+-------+---------+------+
|          1 | 201522 |   198 |     198 |    1 |
|          1 | 201523 |    -1 |     197 |    1 |
|          1 | 201525 |   100 |     297 |    1 |
|          2 | 201524 |    39 |      39 |    2 |
+------------+--------+-------+---------+------+

对于你需要约会的那一周,一周的数字就足够了?一周的数字也可以。每周只需要有一些东西来识别和分组。你的问题在哪里?这太棒了。我对设置变量一点也不熟悉。我需要更多的学习!谢谢该死,我太慢了:(