2016-11-28 110 views
1

嗨我需要帮助解决我的问题。MYSQL从数据库中选择每周和每月一次

我想生产每月和每周的报告。

首先,我已经创建了一个名为calendar_table数据库,其中包含所有的日期格式二零一零年至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

一般来说,数据显示的问题(包括丢失数据),最好在应用程序代码级解析(如一点的PHP) – Strawberry

回答

2

如果周数足够你可以使用一周

你必须选择与组之间asimmetric(DATE_FORMAT(DATE(calendar_table.c_date), '%d%B%Y')是一天..你多塔在吐温结果) 尝试

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 
+0

谢谢你评论我的问题,但不幸的是你的答案并没有给我的愿望输出。您的解决方案的输出结果给了我一周的Null以及给定周内所有销售额的总和。 –

+0

@MaryJhealynVillena答案更新.. – scaisEdge

+0

我试过了,但仍然没有给出我的愿望输出 我试过了: SELECT DATE_FORMAT(DATE(calendar_table.c_date),'%d%b%Y')AS DATE (DATE(buyer_table.buyer_date)= calendar_table.c_date)(calendar_table.c_date在DATE_SUB(NOW(),INTERVAL 7 WEEK)和NOW之间的日历表(date_table.c_date) ())GROUP BY WEEK(calendar_table.c_date) –