在我的数据库中,数据是按天存储的。我想按周对值进行求和,然后将该值除以上周的总和值。可以通过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)
所以任何人都知道如何做到这一点。谢谢。
最佳答案
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进行检查使用下面的查询
您可以尝试上面的代码。
这里我使用了两个变量来计算您的业务逻辑。
一定会对你有帮助。
关于Mysql按周列求和并除以上周的求和值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45958301/