mysql 逐日选择日期

use*_*879 6 mysql sql

我有如下表:

                      login
          date                     user    
       2016-11-23                   1
       2016-11-23                   2
       2016-11-23                   3
       2016-11-25                   2
       2016-11-25                   5
       2016-11-27                   1
Run Code Online (Sandbox Code Playgroud)

从上表我想得到的是这样的:

      date                   count(*)
   2016-11-21                   0
   2016-11-22                   0    
   2016-11-23                   3
   2016-11-24                   0
   2016-11-25                   2
   2016-11-26                   0
   2016-11-27                   1
Run Code Online (Sandbox Code Playgroud)

但是,因为只有日期2016-11-232016-11-252016-11-27,当我这样查询时:

select date, count(*)
from login
where date between (current_date()-interval 7 day) and current_date()
group by date
order by date asc
Run Code Online (Sandbox Code Playgroud)

它无法获得我真正想要的结果。从我的login桌子上可以得出这个结果吗?

Mih*_*hai 4

一种方法是在 JOIN 之前生成所有日期

select GenDate, count(Date)
from login
right join
(select a.GenDate 
from (
    select curdate() - INTERVAL (a.a + (10 * b.a) + (100 * c.a)) DAY as GenDate
    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.GenDate between (current_date()-interval 7 day) and current_date())x
ON x.GenDate=login.Date
group by GenDate
order by GenDate asc
Run Code Online (Sandbox Code Playgroud)