Вам просто нужно придумать что-то уникальное для группы, которое даст вам эти 5-минутные интервалы.
Если вы возьмете минуту времени и поделите ее на 5, то у вас появится нечто уникальное. Например, вы можете использовать GROUP BY CAST (EXTRACT (MINUTE FROM logTime) / 5 AS без знака), и это даст вам 5-минутные интервалы уникальности. По умолчанию / 5 будет делиться без округления.
Чтобы написать рабочий запрос, попробуйте выполнить его поэтапно.
Во-первых, давайте возьмем минуту:
mysql> SELECT userid, EXTRACT(MINUTE FROM loggedtime) as minute from test;
+--------+--------+
| userid | minute |
+--------+--------+
| 1 | 45 |
| 2 | 4 |
| 2 | 5 |
| 4 | 20 |
| 3 | 20 |
| 6 | 30 |
| 7 | 35 |
+--------+--------+
7 rows in set (0.00 sec)
Теперь давайте попробуем создать значение столбца, уникальное для каждого 5-минутного интервала, который вы можете сгруппировать. Это минута, деленная на 5 без округления (указанное выше значение / 5):
mysql> select userid, EXTRACT(MINUTE FROM loggedtime) AS minute, CAST(EXTRACT(MINUTE FROM loggedtime) / 5 AS unsigned) FROM test;
+--------+--------+-------------------------------------------------------+
| userid | minute | CAST(EXTRACT(MINUTE FROM loggedtime) / 5 AS unsigned) |
+--------+--------+-------------------------------------------------------+
| 1 | 45 | 9 |
| 2 | 4 | 1 |
| 2 | 5 | 1 |
| 4 | 20 | 4 |
| 3 | 20 | 4 |
| 6 | 30 | 6 |
| 7 | 35 | 7 |
+--------+--------+-------------------------------------------------------+
7 rows in set (0.01 sec)
Наконец, мы группируемся по этому уникальному столбцу. Этот запрос использует MIN () и MAX () для отображения первой и последней отметки времени в этом интервале, но вы также можете рассчитать время отключения, если хотите, чтобы оно точно соответствовало вашему вопросу.
mysql> SELECT COUNT(*) AS user_count, MIN(loggedtime) AS first_time,
MAX(loggedtime) AS last_time
FROM test
GROUP BY CAST(EXTRACT(MINUTE FROM loggedtime) / 5 AS unsigned)
ORDER BY last_time;
+------------+---------------------+---------------------+
| user_count | first_time | last_time |
+------------+---------------------+---------------------+
| 2 | 2012-03-05 10:04:19 | 2012-03-05 10:05:09 |
| 2 | 2012-03-05 10:20:20 | 2012-03-05 10:20:24 |
| 1 | 2012-03-05 10:30:59 | 2012-03-05 10:30:59 |
| 1 | 2012-03-05 10:35:59 | 2012-03-05 10:35:59 |
| 1 | 2012-03-05 10:45:59 | 2012-03-05 10:45:59 |
+------------+---------------------+---------------------+
5 rows in set (0.00 sec)