我一直在谷歌搜索几个小时...认为这很容易,但显然不适合我:)
我在两个表中有销售数据,我想为特定项目生成每周销售报告。为此,我不关心美元价值,只关心单位数量。一个“周”是一个日历周(无论是开始日,我不在乎)或只是从当前回来的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
我遇到麻烦的地方是连接和语法。
答案 0 :(得分:3)
这符合我的需要:
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
答案 1 :(得分:0)
如果您有一些date/datetime/timestamp
列,则可以在where子句中使用week
函数
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周的年份。
SQLFiddle进行测试。
答案 2 :(得分:0)
为了照顾年终包裹。例如,week(12/30/2018)=52
和week(12/31/2018)=52
都被视为2018年的第52周。2019年的第一天在星期二开始。您可以编写以下案例说明,将12/30/2018和12/31/2018移至2019年的第一周。这样一来,您将有整整7天的时间进行比较:
case when order_date in ( '2018-12-30', '2018-12-31')
then 0
else week(order_date)
end as order_week