您可以使用 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 一切以进行澄清...