2016-12-27 78 views
1

我有這個表:每週銷售總和位置ID

locationid |Sales  |salesdate 
:----------|:--------:|--------: 
40   |571.00 |2007-01-01 
40   |1377.00 |2007-01-02 
40   |571.00 |2007-01-01 
40   |1377.00 |2007-01-02 
40   |571.00 |2007-01-01 
40   |1377.00 |2007-01-02 
40   |571.00 |2007-01-01 
40   |1377.00 |2007-01-02 

我有大約200獨特的區位ID和我的問題是如何將我能夠通過位置ID來總結7天銷售?

我的總體目標是獲得每個位置7天的銷售額和每個位置去年7天的銷售額。

理論上我只是採取每個日期和總日期-7,我應該有52-53條目(取決於一年),但我不知道如何做到這一點。

我戳了一下週圍,發現這個:

SELECT SUM(sales) as 'Total', 
     SUM(CASE WHEN convert(varchar(11),salesdate,101) >= convert(varchar(11),GETDATE() - 7,101) 
       THEN sales ELSE 0 END) as 'Current', 
     SUM(CASE WHEN convert(varchar(11),salesdate,101) >= convert(varchar(11),GETDATE() - 14,101) 
       THEN sales ELSE 0 END) as '7Days' , 
     SUM(CASE WHEN convert(varchar(11),salesdate,101) >= convert(varchar(11),GETDATE() - 28,101) 
       THEN sales ELSE 0 END) as '14Days' 
FROM [MYSQL].[wfmsales].[sales_bk] 

然而,只有做了總金額和每個位置不總結,我還沒有想通的那部分呢。非常感謝您的時間。這是我在stackoverflow上的第一篇文章,所以如果我做了任何錯誤,請讓我知道。

回答

1

使用日期函數進行日期算術。我不知道你想要的輸出,但在過去的7天,你可以這樣做:

SELECT locationId, SUM(sales) as sales_Total, 
     SUM(CASE WHEN salesdate >= CURDATE() - INTERVAL 7 DAYS THEN sales ELSE 0 END) as sales_Current 
FROM [MYSQL].[wfmsales].[sales_bk] 
GROUP BY locationId; 

可以爲任何一段時間,你想添加額外的SUM(CASE)表達式。

+0

感謝戈登,對我來說時間組件是無關緊要的。我會繼續測試這個! –

0

假設您的SUM(CASE WHEN...)查詢按預期工作,您需要GROUP BY locationId列。

SELECT locationId, SUM(sales) as 'Total', 
      SUM(CASE WHEN convert(varchar(11),salesdate,101) >= convert(varchar(11),GETDATE() - 7,101) 
        THEN sales ELSE 0 END) as 'Current', 
      SUM(CASE WHEN convert(varchar(11),salesdate,101) >= convert(varchar(11),GETDATE() - 14,101) 
        THEN sales ELSE 0 END) as '7Days' , 
      SUM(CASE WHEN convert(varchar(11),salesdate,101) >= convert(varchar(11),GETDATE() - 28,101) 
        THEN sales ELSE 0 END) as '14Days' 
    FROM [MYSQL].[wfmsales].[sales_bk] 
    GROUP By locationId