从MySQL获取数小时的条目

时间:2015-08-31 10:24:27

标签: mysql sql database

不幸的是,当涉及到SQL时,我并不是很强大,而在解释自己时并不是很强。我会尽我所能,希望有人可以提供帮助。

我有一个名为soc_stat的表,它有很多列。其中一个是“timestamp”,它只是一个时间戳,另一个是date_of_post,它只是时间戳的date_format();,看起来像这样(例子)2015-08-28 00:18:52 < / p>

我希望这样做会产生一个返回每天/每小时的条目数量的查询

这个例子的内容

2015-08-28 00:01:00 = 218 entries
2015-08-28 00:02:00 = 327 entries
2015-08-28 00:03:00 = 487 entries
2015-08-28 00:04:00 = 118 entries

我需要它来制作图表。

我目前使用以下代码从我的数据库中获取最近24小时

SELECT * FROM `soc_stat` WHERE soc_stat.date_of_post > DATE_SUB(CURDATE(), INTERVAL 1 DAY) 

修改

非常感谢你的回答。他们的工作方式与我想要的信息完全一样。但是我还有一个问题。如果现在如果在一小时或一天内没有输入,则不会返回任何内容。是否可以获得0返回?我的图表取决于我从SQL查询中获得的值。因此,如果我想要24小时图表,如果没有输入则不会显示几个小时。

3 个答案:

答案 0 :(得分:2)

这是每天和每小时

SELECT date(soc_stat.date_of_post) as date,hour(soc_stat.date_of_post) as hour,
count(*) FROM `soc_stat` 
WHERE soc_stat.date_of_post > DATE_SUB(CURDATE(), INTERVAL 1 DAY) 
group by date(soc_stat.date_of_post),hour(soc_stat.date_of_post) 

答案 1 :(得分:2)

尝试:

SELECT date(t.date_of_post) AS date,
       hour(t.date_of_post) as hour,
       count(*) as entries
FROM `soc_stat` t
WHERE t.date_of_post > DATE_SUB(CURDATE(), INTERVAL 1 DAY)
GROUP BY date(t.date_of_post), hour(t.date_of_post)

OR:

SELECT  DATE_ADD(date(t.date_of_post), INTERVAL hour(t.date_of_post)  HOUR)  AS dateTime,
       count(*) as entries
FROM `soc_stat` t
WHERE t.date_of_post > DATE_SUB(CURDATE(), INTERVAL 1 DAY)
GROUP BY date(t.date_of_post), hour(t.date_of_post)

答案 2 :(得分:0)

尝试以下查询:

SELECT date(t.date_of_post) AS date,
       hour(t.date_of_post) as hour,
       count(*) as entries
FROM `soc_stat` t
WHERE t.date_of_post > DATE_SUB(CURDATE(), INTERVAL 1 DAY)
GROUP BY date(t.date_of_post), hour(t.date_of_post)