我有这张桌子:
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的第一篇文章,所以如果我做错了什么请告诉我。
答案 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