我正在尝试通过当前一周(过去7天)的列表获取所有用户尝试的COUNT次
此查询有效,但如果日期不存在,则不会返回0:
SELECT COUNT(*) AS attempt_count, DATE_FORMAT(attempt_date,'%Y/%m/%d') AS attempt_date FROM users_attempts WHERE DATE_SUB(attempt_date, INTERVAL 1 DAY) > DATE_SUB(DATE(NOW()), INTERVAL 1 WEEK) GROUP BY DAY(attempt_date) DESC;
此查询返回每天上一个当前周的所有尝试次数COUNT,我知道了这一点(我只有1条记录):
attempt_count | attempt_date 1 2014/06/19
我想要这个结果:
attempt_count | attempt_date 1 2014/06/19 0 2014/06/18 0 2014/06/17 0 2014/06/16 0 2014/06/15 0 2014/06/14 0 2014/06/13
非常感谢
演示 :http : **//sqlfiddle.com/#!2** / b58bb/1/0
好的,我从线程MySql SingleTable的上一个答案中选择了过去7天,并包含空行
在这里,您可以做些什么来使日期选择动态化
select t1.attempt_date, coalesce(SUM(t1.attempt_count+t2.attempt_count), 0) AS attempt_count from ( select DATE_FORMAT(a.Date,'%Y/%m/%d') as attempt_date, '0' as attempt_count from ( select curdate() - INTERVAL (a.a + (10 * b.a) + (100 * c.a)) DAY as Date from (select 0 as a union all select 1 union all select 2 union all select 3 union all select 4 union all select 5 union all select 6 union all select 7 union all select 8 union all select 9) as a cross join (select 0 as a union all select 1 union all select 2 union all select 3 union all select 4 union all select 5 union all select 6 union all select 7 union all select 8 union all select 9) as b cross join (select 0 as a union all select 1 union all select 2 union all select 3 union all select 4 union all select 5 union all select 6 union all select 7 union all select 8 union all select 9) as c ) a where a.Date BETWEEN NOW() - INTERVAL 7 DAY AND NOW() )t1 left join ( SELECT DATE_FORMAT(attempt_date,'%Y/%m/%d') AS attempt_date, COUNT(*) AS attempt_count FROM users_attempts WHERE DATE_SUB(attempt_date, INTERVAL 1 DAY) > DATE_SUB(DATE(NOW()), INTERVAL 1 WEEK) GROUP BY DAY(attempt_date) DESC )t2 on t2.attempt_date = t1.attempt_date group by DAY(t1.attempt_date) order by t1.attempt_date desc;