2016-11-28 93 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) –