如何查找一系列天的运行总计,并包括没有记录的天数

时间:2013-07-11 20:48:36

标签: mysql

我正在尝试生成一个查询来显示过去一周的图表。数据应包括每日累计注册总数。所以在第一天,如果有5个注册,第2天有一个,第2天应该是6。

我想获取前7天的数据(我的查询使用虚拟数据,所以时间计算是暂时的)和查询我的工作完美,除非有一天没有注册 - 它只是跳过天。它应该做的是提供运行总数(等于总的最后几天)。

这是表格

CREATE TABLE registrations
(`id` int, `name` varchar(50), `created` int);

INSERT INTO registrations
(`id`, `name`, `created`)
VALUES
(1, 'Bob', 1371584524),
(2, 'George', 1371586524),
(3, 'Harold', 1371843424),
(4, 'Ted', 1371845724),
(5, 'Simon', 1373141331),
(6, 'Phil', 1373141724),
(7, 'Dave', 1373313524),
(8, 'Barry', 1373314524),
(9, 'Doug', 1373486524),
(10, 'Earl', 1373487324),
(11, 'Peter', 1373573134),
(12, 'Edward', 1373573725);

这是我到目前为止的查询

SELECT days.date_of_year, COUNT(r.id) AS total_reg
FROM (
     SELECT DISTINCT (FROM_UNIXTIME(ur.created, '%Y-%m-%d')) date_of_year
         FROM `registrations` ur
         WHERE ur.created > (UNIX_TIMESTAMP(NOW())-999999)
 ) days
JOIN `registrations` r ON days.date_of_year >= (FROM_UNIXTIME(r.created, '%Y-%m-%d'))
GROUP BY days.date_of_year

这会产生

+--------------+-----------+
| date_of_year | total_reg |
+--------------+-----------+
| 2013-07-06   | 6         |
| 2013-07-08   | 8         |
| 2013-07-10   | 10        |
| 2013-07-11   | 12        |
+--------------+-----------+

我想要的是

+--------------+-----------+
| date_of_year | total_reg |
+--------------+-----------+
| 2013-07-06   | 6         |
| 2013-07-07   | 6         |
| 2013-07-08   | 8         |
| 2013-07-09   | 8         |
| 2013-07-10   | 10        |
| 2013-07-11   | 12        |
+--------------+-----------+

这是可能的,还是我应该编写一个中间件脚本来处理没有注册的日子?

0 个答案:

没有答案