2013-04-11 69 views
3

我知道下面的情况将在过去7天单查询来获取的过去7天个人数

SELECT count(id) FROM registration 
WHERE createdDate BETWEEN DATE_SUB(CURDATE(), INTERVAL 7 DAY) AND CURDATE() 

返回总数是没有办法,我可以做的就是一个查询过去7天每天都有7项结果返回?

例如:

day 1 - 10 
day 2 - 5 
day 3 - 9 
.. 
.. 
.. 

回答

3

这会给你的日期和数量。

SELECT DATE(createdDate),COUNT(id) 
FROM registration 
WHERE createdDate BETWEEN DATE_SUB(CURDATE(), INTERVAL 7 DAY) AND CURDATE() 
GROUP BY DATE(createdDate) 

或者给更接近你的例子因此你可以使用:

SELECT CONCAT("Day ",DATEDIFF(NOW(), createdDate)) AS day,COUNT(id) 
FROM registration 
WHERE createdDate BETWEEN DATE_SUB(CURDATE(), INTERVAL 7 DAY) AND CURDATE() 
GROUP BY DATE(createdDate) 
+0

哇这就是伟大的,你估计它的可能的,如果显示为0计数有没有在某一天的登记? 天1 - 4 每天2 - 3 天3 - 0 天4 - 1 天5 - 0 类似的东西 – vinz 2013-04-12 08:23:11

+0

我不知道是否有以显示与不注册一个0的方式以上查询。您可以在PHP端执行该操作,或者使用@ Barmar的答案。 – Jim 2013-04-15 03:43:05

3

添加组by语句:

SELECT count(id), DATE(createdDate) 
FROM registration 
WHERE createdDate BETWEEN DATE_SUB(CURDATE(), INTERVAL 7 DAY) AND CURDATE() 
GROUP BY DATE(createdDate) 
+0

+1简单,最好的 – alwaysLearn 2013-04-11 04:07:22

1
select 8 - n day, count(id) 
from registration 
join (select 1 n union select 2 union select 3 union select 4 union select 5 union select 6 union select 7) x 
on createdDate between date_sub(curdate(), interval n day) and date_sub(curdate(), interval n-1 day) 
group by day 
order by day