1

我已经在谷歌上搜索了几个小时......认为这很容易,但显然不适合我:)

我有两个表中的销售数据,我想为特定项目生成每周销售报告。为此,我不关心美元价值,只关心单位数量。“周”是日历周(无论开始日是什么,我不在乎)或只是从当前返回的 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

我遇到麻烦的地方是连接和语法。

4

3 回答 3

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
于 2013-02-24T19:29:18.747 回答
0

如果您有某些date/datetime/timestamp列,则可以week在 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 周,您必须注意这一年。

SQLFiddle用于测试。

于 2013-02-24T17:16:40.953 回答
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
于 2019-01-06T21:08:34.870 回答