2017-08-30 69 views
0

在我的数据库中,数据按天存储。我想按周汇总价值,然后将价值除以上周的总价值。是否可以通过SQL实现? 例子:Mysql按周和按最后一周的总和值的总和

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) 

因此,任何一个有任何想法如何做this.Thank你。

+0

你能详细说明你的问题吗? – Blank

回答

0
SELECT ITEMCODE,F_VAL FROM 
(
    SELECT @PREV_VAL,CASE WHEN [email protected]_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使用下面的查询

你可以试试上面的代码。

在这里,我用两个变量来计算您的业务逻辑。

绝对会帮助你。

+0

如果这个答案还不够,请考虑上传你的表/数据到sqlfiddle.com(例如使用mysqldump),然后回复这个评论,这样我/我们可以提供更多的帮助。 – barrycarter

+0

我实际上是在向OP提出这个建议,而不是你,但是你遇到了什么问题? sqlfiddle.com应该提供有用的错误消息。 – barrycarter

+0

sqlfiddle.com似乎不舒服,请尝试https://www.db-fiddle.com/ – barrycarter

0

这不回答这个问题,但我会用创建临时表像开始:

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

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