あなたはそれらの5分の間隔を与えるグループ分けのユニークなものを見つけ出す必要があります。
時間を分かり、それを5で割った場合、ユニークなものがあります。たとえば、GROUP BY CAST(EXTRACT(MINUTE FROM logTime)/ 5 AS unsigned)を使用すると、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分間隔でユニークだ列値を作成することができます試してみましょう。その独特の列で
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)
最後に、我々のグループ:それはありません丸め(上記の値/ 5)で5で割った分です。この問合せでは、MIN()とMAX()を使用して、その間隔の最初と最後のタイムスタンプを表示しますが、質問と正確に同じようにしたい場合は、カットオフ時間を計算することもできます。あなたはそれが5分間隔を表示したい場合は
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)
これはSQL単独でも可能ですが、おそらく 'userId'と' loggedtime'秒(時間は昇順である必要があります)の順に選択し、新しい配列を作成し、結果セットをループし、 5分制限を超えていない間、 5分を経過するか、新しいユーザーIDに達すると、ユーザーIDとカウンターを使用してアレイ内に新しいエントリーを作成します。 – Yaniro
あなたの区間の境界は正確には何ですか? 10:01:00..10:05:59の値を10:05の範囲にあるものとしてカウントしたいかのように見えます。 10:06:00:10:10:59が10:10までの範囲にあり、等々。あれは正しいですか? –
はい、あなたは正しい@jonathanです。どのようにして2回の間にデータを選択できますか?たとえば。ログインしたユーザーがこの時間まで過去5分間にカウントする必要がある場合。アイデアはありますか? – learner