2017-07-25 64 views
0

我試圖做的最後一個累積和12個月如此,例如在201702它應該顯示的201603總和201702.的過去12個月中累計總和

現在我有以下查詢:

select date, 
     product, 
     sum(sales) over (partition by product order by date) as cumulative 
FROM sales 

的數據是這樣的:

Date \t Product \t Sales \t Sales Acum 
 
201601 \t 1 \t 7648 \t 7648 
 
201602 \t 1 \t 5538 \t 13186 
 
201603 \t 1 \t 7659 \t 20845 
 
201604 \t 1 \t 6943 \t 27788 
 
201605 \t 1 \t 7604 \t 35392 
 
201606 \t 1 \t 4398 \t 39790 
 
201607 \t 1 \t 3261 \t 43051 
 
201608 \t 1 \t 3040 \t 46091 
 
201609 \t 1 \t 5637 \t 51728 
 
201610 \t 1 \t 5520 \t 57248 
 
201611 \t 1 \t 8554 \t 65802 
 
201612 \t 1 \t 4794 \t 70596 
 
201701 \t 1 \t 6704 \t 69652 
 
201702 \t 1 \t 2234 \t 66348 
 
201703 \t 1 \t 4093 \t 62782 
 
201704 \t 1 \t 4171 \t 60010 
 
201705 \t 1 \t 6741 \t 59147 
 
201706 \t 1 \t 2902 \t 57651 
 
201601 \t 2 \t 582 \t 582 
 
201602 \t 2 \t 2393 \t 100416 
 
201603 \t 2 \t 4614 \t 105030 
 
201604 \t 2 \t 2611 \t 107641 
 
201605 \t 2 \t 6891 \t 114532 
 
201606 \t 2 \t 4409 \t 118941 
 
201607 \t 2 \t 5454 \t 124395 
 
201608 \t 2 \t 7927 \t 132322 
 
201609 \t 2 \t 6797 \t 139119 
 
201610 \t 2 \t 6740 \t 145859 
 
201611 \t 2 \t 8077 \t 153936 
 
201612 \t 2 \t 5143 \t 159079 
 
201701 \t 2 \t 6383 \t 67439 
 
201702 \t 2 \t 1593 \t 66639 
 
201703 \t 2 \t 5352 \t 67377 
 
201704 \t 2 \t 4065 \t 68831 
 
201705 \t 2 \t 7434 \t 69374 
 
201706 \t 2 \t 2332 \t 67297

+4

可愛。那麼問題是什麼? –

+4

您正在使用哪個[DBMS](https://en.wikipedia.org/wiki/DBMS)? Postgres的?甲骨文? –

+2

請** [編輯] **您的問題,並根據該數據添加一些示例數據和預期輸出。 [**格式文本**](http://stackoverflow.com/help/formatting)請,[**無截屏**](http://meta.stackoverflow.com/questions/285551/why-may -i-不上傳圖像-的代碼上那麼當灰化-A-問題/ 285557#285557)。 ** [編輯] **你的問題 - 做**不**的郵遞區號或在註釋中的附加信息。 –

回答

0

如果您想在上一年獲取有關僅銷售的信息,應該存在WHERE條款中的適當條件。 對於Oracle,您可以使用下面的查詢:

SELECT date, 
    product, 
    sum(sales) over (partition by product order by date) as cumulative 
FROM sales 
WHERE date >= add_months(sysdate, -12) 
0

假設沒有丟失一個月,你想總銷售額的每個產品,您可以使用下面的查詢 -

SELECT "Date" 
    , "Product" 
    , "Sales" 
    , SUM("Sales") OVER (PARTITION BY "Product" ORDER BY "Date" ROWS BETWEEN 11 PRECEDING AND CURRENT ROW) AS Cumulative 
FROM Sales; 

SQLFiddle