Mysql 按日历周列出的SQL销售报告

Mysql 按日历周列出的SQL销售报告,mysql,sql,zen-cart,Mysql,Sql,Zen Cart,我在谷歌上搜索了几个小时。。。我认为这很容易,但显然不是对我来说:) 我有两个表中的销售数据,我想为特定项目生成每周销售报告。为此,我不关心美元的价值,只关心单位的数量。“一周”可以是一个日历周(不管是哪一天开始,我都不在乎),也可以是从当前开始的7天时间段(所以第1周是最后7天,第2周是8-15天之前,等等),以较容易的为准。我只是想监控一段时间内的销售趋势。它最好能跨越数年,这样,如果是在1月的第一周,它就不会只显示一个记录 数据来自ZenCart。相关表/列结构如下所示: Table "o

我在谷歌上搜索了几个小时。。。我认为这很容易,但显然不是对我来说:)

我有两个表中的销售数据,我想为特定项目生成每周销售报告。为此,我不关心美元的价值,只关心单位的数量。“一周”可以是一个日历周(不管是哪一天开始,我都不在乎),也可以是从当前开始的7天时间段(所以第1周是最后7天,第2周是8-15天之前,等等),以较容易的为准。我只是想监控一段时间内的销售趋势。它最好能跨越数年,这样,如果是在1月的第一周,它就不会只显示一个记录

数据来自ZenCart。相关表/列结构如下所示:

Table "orders" has columns: orders_id, date_purchased

Table "orders_products" has columns: orders_id, products_id, product_quantity

我遇到的问题是连接和语法。

如果您有一些
date/datetime/timestamp
列,您可以使用Where子句中的函数

select week(now()) as week, sum(units) as total
from sales
where week(sales_date) = week(now());
还是前一周

select week(now()) - 1 as week, sum(units) as total
from sales
where week(sales_date) = week(now()) - 1;
您必须注意从第52/53周到第0/1周的全年总结


用于测试。

这满足了我的需要:

SELECT o.date_purchased, CONCAT(YEAR(o.date_purchased), LPAD(WEEK(o.date_purchased), 2, '0')) as weekyear, op.products_id, SUM( op.products_quantity )
FROM orders_products op
LEFT JOIN orders o ON op.orders_id = o.orders_id
WHERE op.products_id = 331
GROUP BY weekyear
ORDER BY weekyear

为了照顾好年终包。例如,
周(2018年12月30日)=52
周(2018年12月31日)=52都被视为2018年第52周。2019年的第一天从星期二开始。您可以编写如下案例陈述,将2018年12月30日和2018年12月31日移至2019年第一周。因此,您将有一周7天的时间进行比较:

case when order_date in ( '2018-12-30', '2018-12-31')
     then 0
     else week(order_date)
end as order_week

很多人经常发布数据结构问题。您能给我们看一下您的表,其中包含示例和预期数据吗?:)你知道,我意识到它的结构比我想象的要简单得多。也许桌子并不是真的必要。我已经编辑了这个问题。Zen Cart sales report mod内置了这个功能,不是吗?谢谢我需要更多的人手。我不知道如何度过这个星期。另外,我希望它显示结果表中的所有数据。。。每个结果不包含一个查询。可能吗?“一组一组”的交易?+1我已经离开一段时间了。很高兴看到你自己发现了。坚持下去!我是新来的。我有一个非常天真的问题。如何正确格式化sql代码。演示如何在编辑问题时使用右侧的问号符号。