我想获取一段时间(比如一周)的注册数量,这并不难,但我想知道 MySQL 是否有可能连续几天返回零没有注册。
一个例子: 数据:
ID_Profile datCreate 1 2009-02-25 16:45:58 2 2009-02-25 16:45:58 3 2009-02-25 16:45:58 4 2009-02-26 10:23:39 5 2009-02-27 15:07:56 6 2009-03-05 11:57:30
SQL:
SELECT DAY(datCreate) as RegistrationDate, COUNT(ID_Profile) as NumberOfRegistrations FROM tbl_profile WHERE DATE(datCreate) > DATE_SUB(CURDATE(),INTERVAL 9 DAY) GROUP BY RegistrationDate ORDER BY datCreate ASC;
在这种情况下,结果将是:
RegistrationDate NumberOfRegistrations 25 3 26 1 27 1 5 1
显然我中间错过了几天。目前我正在我的 php 代码中解决这个问题,但我想知道 MySQL 是否有任何方法可以自动返回 0 来表示丢失的天/行。这将是期望的结果:
RegistrationDate NumberOfRegistrations 25 3 26 1 27 1 28 0 1 0 2 0 3 0 4 0 5 1
这样我们就可以使用 MySQL 来解决有关一个月天数的任何问题,而不是依赖 php 代码来计算每个月有多少天,因为 MySQL 内置了此功能。
提前致谢
最佳答案
不,但一种解决方法是创建一个带有日期主键的单列表,并预加载每天的日期。你会有从最早的起点一直到遥远的 future 的日期。
现在,您可以将统计数据与它进行 LEFT JOIN - 然后您将得到没有数据的那几天的空值。如果您确实想要零而不是空,请使用 IFNULL(colname, 0)
关于mysql - 如何从Mysql取回没有统计数据的日子的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/614739/