+-------------+---------------------+
| 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获取每天的计数并显示空白日期(在一定范围内):
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计数?
答案 0 :(得分:2)
假设它是一个选项,请考虑创建一个Dates Lookup表。然后,您可以轻松使用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。搜索SO以获取一些示例。