0

我正在尝试生成一个查询以显示过去一周的图表。数据应包括每日累计注册总数。因此,如果第一天有 5 个注册,第二天有 1 个,那么第 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        |
+--------------+-----------+

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

4

0 回答 0