我有当前的SQL查询来选择每小时的请求:
SELECT ((FLOOR( unix_timestamp(request_when)/(60*60))*(60*60))*1000) as request_when, COUNT(*) as amount
FROM api_requests WHERE request_when BETWEEN SUBDATE(NOW(), INTERVAL 12 HOUR) AND NOW()
GROUP BY HOUR(request_when) ORDER BY id DESC;
问题是当有0行时,它不会返回一行,这是根据查询预期的。但是,我希望它返回0(使用正确的日期时间/时间戳)。我玩过其他查询,但似乎都没有。
现在发生的一个示例输出是:
1289516400000 6
1289512800000 15
1289509200000 11
1289505600000 31
1289476800000 3
你会注意到它跳了几个小时。如果您不想进行数学计算,那么这些时间戳的日期时间值为
2010-11-11 12:00:00 3
2010-11-11 20:00:00 31
2010-11-11 21:00:00 11
2010-11-11 22:00:00 15
2010-11-11 23:00:00 7
我希望没有行(例如13-19小时)的时间返回“0”而不是没有行。这会使我想要的输出看起来像这样:
2010-11-11 12:00:00 3
2010-11-11 13:00:00 0
2010-11-11 14:00:00 0
2010-11-11 15:00:00 0
2010-11-11 16:00:00 0
2010-11-11 17:00:00 0
2010-11-11 18:00:00 0
2010-11-11 19:00:00 0
2010-11-11 20:00:00 31
2010-11-11 21:00:00 11
2010-11-11 22:00:00 15
2010-11-11 23:00:00 7
我继续创建了一个“助手”或“填充”表,其中的小时数从00到23,我尝试使用RIGHT JOIN,但我的查询返回0行,根本不起作用。 此查询不起作用如下所示:
SELECT ((FLOOR( unix_timestamp(request_when)/(60*60))*(60*60))*1000) as request_when, IFNULL(COUNT(*),0) as amount
FROM api_requests RIGHT JOIN _filler ON (HOUR(api_requests.`request_when`) = _filler.`hours`)
WHERE request_when BETWEEN SUBDATE(NOW(), INTERVAL 12 HOUR) AND NOW() GROUP BY HOUR(request_when) ORDER BY api_requests.id DESC;
答案 0 :(得分:0)
选择填充表中的值而不是数据表。我会把它改为
select ... from _filler left join api_requests ...