2017-07-03 61 views
-1
兩者之間

我有這個查詢得到這兩個日期我怎樣才能得到所有月份的日期

SELECT date as date_month, status FROM tbl_reports WHERE status != 0 AND (date BETWEEN '2017-01-01' AND '2017-12-31') GROUP BY MONTH(date) 

結果

date_month  
    2017-04-19 
    2017-05-24 
    2017-06-26 
    2017-07-01 

,但我怎麼能知道檢查結果,即使之間的所有regsiterd數據還有其它月份

要導致不regsitered輸入

Date_month 
    2017-01-01 
    2017-02-01 
    2017-03-01 - it will give this value if there is no such data in this month 
    2017-04-19 - i will get the input date from database 
    '' '' '' 
    2017-12-31 

有可能嗎?或者我需要一些PHP代碼來操縱這些數據? 謝謝你提出我的回答我的問題.. :)

+0

首先:您的查詢是不正確的。查詢的SELECT部分​​中沒有聚合函數。看起來你是在濫用小組來獲得某種獨特的副作用,每個月只選擇一個日期? –

+0

至於問題本身:我認爲你必須考慮創建一個有兩列的表格:年份和月份。並且你從2017年1月1日填寫該表,直到2027-12年或者什麼日期與你有關。 然後,您可以將該表中的日期添加到您當前的查詢中 –

+0

ohh我明白了..謝謝sr ..您的權利,但是如果我需要選擇一個月內的每個數據並且只給出一個數據沒有價值(他們每個月的第一天的價值。)是否有可能..我會按功能刪除我的組?並按順序使用? –

回答

1

創建一個額外的表,名爲datehelper。提供2列:年份和月份。並填寫年份:2017年至2027年和1/12個月。

SELECT 
    datehelper.year, 
    datehelper.month, 
    r.status 
FROM datehelper 
LEFT JOIN tbl_reports r ON MONTH(r.date) = datehelper.month 
    AND YEAR(r.date) = datehelper.year AND status != 0 
WHERE (datehelper.year = '2017') 
ORDER BY datehelper.year, datehelper.month 

我發現如果在某個月有更多的記錄,你會得到左邊加入的部分的重複。 你期望什麼狀態?我們認爲有狀態爲0(不含)狀態= 1,狀態記錄= 2

datehelper:

year month  
    2017 1 
    2017 2 
    2017 3 
    2017 4 
    ... 
    2017 11 
    2017 12 
    2018 1 
    ... 
+0

我該如何放置月份?我在1/12或1到12有點混淆? sory xD –

+0

是2017 - 1; 2017 - 2等 –

+0

哦w8哈哈哈我會把它現在 –

相關問題