首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何防止在MySQL中按小时选择空白?

如何防止在MySQL中按小时选择空白?
EN

Stack Overflow用户
提问于 2010-11-11 23:06:49
回答 1查看 172关注 0票数 0

我有当前的SQL查询来选择每小时的请求:

代码语言:javascript
复制
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(带有正确的日期时间/时间戳)。我玩过其他的问题,但似乎都没有用。

现在发生的事情的一个例子是:

代码语言:javascript
复制
1289516400000   6
1289512800000   15
1289509200000   11
1289505600000   31
1289476800000   3

你会注意到它跳了几个小时。如果您不想做数学运算,那么这些时间戳的日期时间值是

代码语言:javascript
复制
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“而不是没有行。这将使我想要的输出看起来如下所示:

代码语言:javascript
复制
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小时的“助手”或“填充”表,并尝试使用正确的联接,但我的查询返回0行,根本无法工作。这个不工作的查询如下所示:

代码语言:javascript
复制
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;
EN

回答 1

Stack Overflow用户

发布于 2010-11-11 23:27:05

选择填充表中的值,而不是数据表。我会把它重新定义为

代码语言:javascript
复制
select ... from  _filler left join api_requests ...
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4160160

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档