MySQL Query基于HOUR

时间:2014-02-25 18:22:26

标签: mysql

我正在尝试查询一段时间内“活跃”的用户数量

所以我们假设表格看起来像这样

+---------------------+--------+ | start_date | active | +---------------------+--------+ | 2014-02-25 19:37:50 | 1 | | 2014-02-25 19:35:13 | 1 | | 2014-02-25 19:24:06 | 1 | | 2014-02-25 19:16:04 | 1 | | 2014-02-25 19:14:52 | 1 | | 2014-02-25 19:10:31 | 1 | | 2014-02-25 19:08:29 | 1 | | 2014-02-25 19:08:16 | 1 | | 2014-02-25 19:09:28 | 1 | | 2014-02-25 19:06:04 | 1 | | 2014-02-25 19:17:46 | 1 | | 2014-02-25 19:06:35 | 0 | | 2014-02-25 19:06:45 | 1 | | 2014-02-25 19:00:35 | 1 | | 2014-02-25 19:02:59 | 1 | | 2014-02-25 18:59:12 | 1 | | 2014-02-25 18:56:57 | 1 | | 2014-02-25 19:00:44 | 1 | | 2014-02-25 19:07:39 | 1 | | 2014-02-25 18:54:55 | 1 | +---------------------+--------+

我想知道一天中每小时在线的人数。

我之前的查询看起来像这样

SELECT start_date as date, count(active) as active FROM sessions WHERE start_date>'2014-02-25 00:00:00' GROUP BY hour(start_date);

然而,这似乎只能返回当他们各自的start_date在start_date小时查看时“活动”的人数(如果这是有意义的),而不是那个小时内所有用户都活跃(不管他们的start_date何时)是)。

有什么建议吗?

1 个答案:

答案 0 :(得分:0)

假设你还有一个end_date,你在寻找类似的东西吗?

SELECT hour_date, 
SUM((hour(start_date)<=hour_date) and (hour(end_date)>=hour_date)) as active 
FROM sessions, 
(SELECT distinct hour(start_date) as hour_date FROM sessions
WHERE start_date>'2014-02-25 00:00:00') hours
WHERE start_date>'2014-02-25 00:00:00'
GROUP BY hour_date;

(更好的方法是从单独的表中获取小时值 - 请参阅http://sqlfiddle.com/#!2/cc6b9/2