在我的数据库中,数据按天存储。我希望按周汇总值,然后将值除以上周的总和值。是否可以通过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)
所以任何人都知道如何做到这一点。谢谢。
答案 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
或类似内容的副本。