嗨,我的问题需要帮助。
我想制作每月和每周报告。
首先,我已经创建了一个名为calendar_table
的数据库,其中包含2010年到2040年的所有日期
更直观地表达问题:
SELECT DATE_FORMAT(DATE(calendar_table.c_date),'%d %b %Y') AS DATE, IFNULL(SUM(buyers_table.sales_total),0) AS total_sales FROM buyers_table RIGHT JOIN calendar_table ON (DATE(buyers_table.buyer_date) = calendar_table.c_date) WHERE (calendar_table.c_date BETWEEN DATE_SUB(NOW(), INTERVAL 1 WEEK) AND NOW()) GROUP BY calendar_table.c_date
目前的输出是:
DATE total_sales
23 Nov 2016 0
24 Nov 2016 0
25 Nov 2016 0
26 Nov 2016 4500
27 Nov 2016 5800
28 Nov 2016 0
29 Nov 2016 3500
所以它产生一周而不是每周的日产量。
我的愿望输出应该是这样的:
DATE total_sales
17 Oct 2016 0
24 Oct 2016 0
31 Oct 2016 0
07 Nov 2016 4500
14 Nov 2016 5800
21 Nov 2016 0
28 Nov 2016 3500
当然,这里的逻辑与月度相同
希望你能帮助我,我有点困惑:)
由于
答案 0 :(得分:2)
如果周数足够,您可以使用周
你有选择和分组之间的对称(DATE_FORMAT(DATE(calendar_table.c_date),'%d%b%Y')是一天..你更多的结果在一个ween) 试试
SELECT date_add('2016-01-01', INTERVAL week('calendar_table.c_date')-1 WEEK) AS DATE,
IFNULL(SUM(buyers_table.sales_total),0) AS total_sales
FROM buyers_table RIGHT JOIN calendar_table ON (DATE(buyers_table.buyer_date) = calendar_table.c_date)
WHERE (calendar_table.c_date BETWEEN DATE_SUB(NOW(), INTERVAL 7 WEEK) AND NOW())
GROUP BY week('calendar_table.c_date')-1
和月份的月份
SELECT date_add('2016-01-01', INTERVAL month('calendar_table.c_date')-1 month) AS DATE,
IFNULL(SUM(buyers_table.sales_total),0) AS total_sales
FROM buyers_table RIGHT JOIN calendar_table ON (DATE(buyers_table.buyer_date) = calendar_table.c_date)
WHERE (calendar_table.c_date BETWEEN DATE_SUB(NOW(), INTERVAL 7 WEEK) AND NOW())
GROUP BY month('calendar_table.c_date')-1