2014-04-11 210 views
0

我有一個似乎很容易一個問題,但我失敗了我自己如何完成sql查詢以顯示整個月份?

我有一個網站訪問者的統計信息mysql表

+-----------------------------+ 
+ date  | visits  + 
+-----------------------------+ 
+ 2014-03-01 | 198   + 
+ 2014-03-02 | 259   + 
+ 2014-03-03 | 94   +     
+-----------------------------+ 

我有這個疑問解決它

SELECT * FROM statistics WHERE date >= '2014-03-01' and date <= '2014-03-30'; 

我的問題是,如果我可以用一個SQL查詢完成整個月,所以我可以得到這個輸出:

+-----------------------------+ 
+ date  | visits  + 
+-----------------------------+ 
+ 2014-03-01 | 198   + 
+ 2014-03-02 | 259   + 
+ 2014-03-03 | 94   +     
+ 2014-03-04 | 0    +     
+ 2014-03-05 | 0    +     
+ 2014-03-06 | 0    + 
...    
+ 2014-03-30 | 0    +     
+-----------------------------+ 

非常感謝您提前。

+1

沒有,但創建日期的臨時表,然後左側的接合部會工作。 –

+0

與您的問題無關,但在您的代碼中,<='2014-03-30'應該是<'2014-04-01',原因有兩個。你必須考慮這兩個原因。 –

回答

0

你是什麼意思由一個SQL查詢? 在這裏,您也正在使用一個單一的查詢。

「SELECT * FROM統計信息,日期> = '2014年3月1日' 和日期< = '2014年3月30日'」

0

我想你可以子句之間使用。你可以編寫一個像

「選擇*從統計'2014-03-01'和'2014-03-30'之間的日期'」。

0

兩件事。

SQL無法(很容易)在沒有數據的情況下創建行。這意味着如果2014-03-05沒有行,那麼您將不會獲得一行,更不用說其中一個計數爲0的行。「創建」這樣的空行的唯一真正方法是讓另一個表具有LEFT JOIN到的日期列表。但是,這是非常困難的。

其次,你可以用下面的方便抓取整個月的價值:在一個非常聰明的方式

WHERE date BETWEEN '2014-03-01' AND DATE_ADD('2014-03-01', INTERVAL 1 MONTH)