MYSQL从数据库中选择每周和每月

时间:2016-11-28 22:14:11

标签: mysql database

嗨,我的问题需要帮助。

我想制作每月和每周报告。

首先,我已经创建了一个名为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

当然,这里的逻辑与月度相同

希望你能帮助我,我有点困惑:)

由于

1 个答案:

答案 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