您可以使用 MySQL 变量为您想要的所有日期构建一个自动结果集。
select
AllDaysYouWant.MyJoinDate,
count( U.User_ID ) as NumberJoined
from
( select
@curDate := Date_Add(@curDate, interval 1 day) as MyJoinDate
from
( select @curDate := '2012-11-21' ) sqlvars,
Users
limit 18 ) AllDaysYouWant
LEFT JOIN Users U
on AllDaysYouWant.MyJoinDate = U.User_JoinDate
group by
AllDaysYouWant.MyJoinDate
内部查询,我只是在没有键的情况下加入 users 表,所以它只是用来循环 X 条记录以表示您想要的日期跨度......这可能是 30、100 等等...... .. 只要表(在本例中为用户)具有您期望的尽可能多的记录。
那么,只有天数的结果被加入到用户表中,但这一次是基于用户的 JOIN_DATE。简单的 COUNT() 应该可以得到你想要的。
“AllDaysYouWant”是分配给内部第一部分查询的别名
( select
@curDate := Date_Add(@curDate, interval 1 day) as MyJoinDate
from
( select @curDate := '2012-11-21' ) sqlvars,
Users
limit 18 ) AllDaysYouWant
这基本上说明...从用户表(但可以是任何),给我 18 行数据(通过限制,但几乎可以是任意数量的记录,但您只需要从 11 月 22 日到 12 月 6 日,这只有 14 天,但我做了 18 天,原则上它几乎可以是任何东西。用户表上方是 (select @curDate := '2012-11-21') sqlvars。查询中包含的任何选择语句作为表源的括号必须有一个别名,因为它只是一个我将使用的变量,所以不管它的名字是什么。所以,这个查询在 11 月 21 日开始变量,并且 Select @curDate := Date_Add ...blah blah 声明取@curDate 的当前值,向其添加 1 天(现在变为 11 月 22 日)并将其存储在返回的行“MyJoinDate”中。所以现在,这个内部查询创建了你的日期表从 11 月 22 日起向前 18 天的数据,并具有别名“AllDaysYouWant”供查询的其余部分参考。
我已将您可能遇到的查询调整为 alias.field all 以进行澄清...