2017-08-30 105 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或類似的副本。