我有这个表:
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的第一篇文章,所以如果我做错了什么,请告诉我。
使用日期函数进行日期运算。 我不确定您想要什么输出,但在过去的 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)
表达式。
假设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