按地点ID列出的每周销售额

时间:2016-12-27 20:05:54

标签: mysql sql date sum aggregate

我有这张桌子:

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个条目(取决于年份),但是我不知道该怎么做。

我p了一下,发现了这个:

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的第一篇文章,所以如果我做错了什么请告诉我。

2 个答案:

答案 0 :(得分: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)表达式。

答案 1 :(得分: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