mysql - 按位置 ID 划分的每周销售额

标签 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 天的销售额。

理论上我只需要每个日期和 date-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) 表达式。

关于mysql - 按位置 ID 划分的每周销售额,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41351531/

相关文章:

mysql - 将 MySQL root 密码重置为 "default"- MAMP

r - 将字符月份名称转换为日期时间对象

excel - 按年份计算excel中两个范围之间的记录数并处理空日期

android - SQLite 数据库中的外键

android - 如何在android中计算最后一个日期收件箱短信

mysql - 使用动态选择mysql存储过程的列

php - 以hms格式排序时间的Mysql查询

java - 禁用外键检查后无法删除或更新父行

sql - 如何实现类似 highrise 或 facebook 的权限系统

mysql - 将两个选项卡的结果组合成一行