每周的Mysql总和和上周的分红总和

时间:2017-08-30 10:42:35

标签: mysql

在我的数据库中,数据按天存储。我希望按周汇总值,然后将值除以上周的总和值。是否可以通过SQL实现? 示例:

   Table  Structure
   ItemCode   Amount         DatebyDay
   01         500           20170815
   01         500           20170816
   ...
   01         500           20170819
   01         1000           20170821
   01         1000           20170822
   ...
   01         1000           20170825
    ...
   02         2000           20170815
   02         2000           20170816
   ...
   02         2000           20170819
   02         3000           20170821
   02         3000           20170822
   ...
   02         3000           20170825
   ....

我的预期结果是:

 01  2                //(1000*5)/(500*5)
 02  1.5              //(3000*5)/(2000*5)

所以任何人都知道如何做到这一点。谢谢。

2 个答案:

答案 0 :(得分:0)

SELECT ITEMCODE,F_VAL FROM 
(
    SELECT @PREV_VAL,CASE WHEN ITEMCODE=@PREV_ITEMCODE THEN AMT/@PREV_VAL END F_VAL, @PREV_VAL:=AMT,ITEMCODE,@PREV_ITEMCODE :=ITEMCODE FROM
    (
        SELECT SUM(AMOUNT) AMT,DATEBYDAY,ITEMCODE FROM 
        (
            SELECT *,WEEK(DATEBYDAY) WEEK 
            FROM STRUCTURE,(SELECT @PREV_VAL:=0,@PREV_ITEMCODE :=0)Z1 ORDER BY ITEMCODE, WEEK(DATEBYDAY)
        )Z GROUP BY ITEMCODE,WEEK
    )Y 
)X WHERE F_VAL IS NOT NULL;

您可以使用SQLFiddle Demo使用以下查询

进行查询

您可以尝试以上代码。

这里我使用了两个变量来计算你的业务逻辑。

绝对会帮助你。

答案 1 :(得分:0)

这并没有回答这个问题,但我首先要创建一个临时表,如:

SELECT SUM(amount), WEEK(DatebyDay) AS week FROM Structure GROUP BY week;

然后,您可以将其加入t1.week = t2.week-1或类似内容的副本。