2013-06-12 54 views
1
+-------------+---------------------+ 
| uid   | date    | 
+-------------+---------------------+ 
|   35 | 01-11-2009 19:32:44 | 
|   35 | 01-13-2009 22:33:49 | 
|   42 | 01-23-2009 22:08:24 | 
|   42 | 02-01-2009 22:33:57 | 
|   35 | 02-01-2009 22:37:34 | 
|   35 | 04-20-2009 15:23:49 | 
+-------------+---------------------+ 

我想每一天的計數像一個特定的UID,並顯示空天(範圍內):MySQL的組按天顯示空天

User 35 (21 days) 
01-11-2009 -> 1 
01-12-2009 -> 0 
01-13-2009 -> 1 
01-14-2009 -> 0 
01-15-2009 -> 0 
01-16-2009 -> 0 
01-17-2009 -> 0 
01-18-2009 -> 0 
01-19-2009 -> 0 
01-20-2009 -> 0 
01-21-2009 -> 0 
01-22-2009 -> 0 
01-23-2009 -> 0 
01-24-2009 -> 0 
01-25-2009 -> 0 
01-26-2009 -> 0 
01-27-2009 -> 0 
01-28-2009 -> 0 
01-29-2009 -> 0 
01-30-2009 -> 0 
01-31-2009 -> 0 
02-01-2009 -> 1 

到目前爲止,我得到

SELECT MONTHNAME(date), COUNT(uid) FROM cliques_referidos WHERE uid = 35 GROUP BY YEAR(date), MONTH(date), DAY(date) 

如何獲得0之間的天數?

回答

1

假設這是一個選項,請考慮創建日期查找表。然後,您可以輕鬆使用OUTER JOIN創建您的列表。這是關於它的SO post

調用查找表datelookup一個名爲datevalue日期字段,那麼這應該工作:

SELECT MONTHNAME(d.datevalue), COUNT(cr.uid) 
FROM datelookup d LEFT JOIN 
    cliques_referidos cr ON d.datevalue = DATE(cr.date) 
     and cr.uid = 35 
GROUP BY YEAR(d.datevalue), MONTH(d.datevalue), DAY(d.datevalue) 

既然你是日期字段是一個日期時間,在您的加入使用DATE()

如果無法創建查找表,請使用存儲過程或函數來查看,因爲MySQL不支持遞歸CTE。搜索一些例子。