ホームページ >データベース >mysql チュートリアル >カウント クエリのタイムスタンプを 5 分間隔にグループ化するにはどうすればよいですか?
カウント クエリのタイムスタンプを 5 分間隔でグループ化します
質問:
特定の時間範囲内の John の出現数をカウントするクエリですが、結果はグループ化されていないタイムスタンプとそのカウントです。目標は、結果を 5 分間隔にグループ化することです。
解決策:
結果を 5 分間隔にグループ化するには、MySQL と PostgreSQL を特定の構文で使用できます。
PostgreSQL:
<code class="language-sql">SELECT date_trunc('minute', timestamp) + INTERVAL '5 minutes' * (EXTRACT(MINUTE FROM timestamp)::integer / 5) AS five_minute_interval, name, COUNT(b.name) FROM time a, id WHERE … GROUP BY five_minute_interval, name ORDER BY five_minute_interval;</code>
MySQL:
<code class="language-sql">SELECT FROM_UNIXTIME(FLOOR(UNIX_TIMESTAMP(timestamp) / 300) * 300) AS five_minute_interval, name, COUNT(b.name) FROM time a, id WHERE … GROUP BY five_minute_interval, name ORDER BY five_minute_interval;</code>
どちらのクエリでも、GROUP BY
句は、タイムスタンプを 300 で割った丸め結果によってグループ化されます (5 分間隔を表します)。これにより、タイムスタンプ用に 5 分のビンが効果的に作成され、各タイムスタンプが対応するビンに割り当てられます。 PostgreSQL は date_trunc
関数を使用してタイムスタンプの切り捨てとグループ化をより適切に処理しますが、MySQL は FROM_UNIXTIME
関数と FLOOR
関数を使用して同じ機能を実現します。
出力:
出力には、5 分間隔でグループ化された結果と、対応する John の発生数が表示されます。
<code>five_minute_interval name COUNT(b.name) ------------------------ ---- ------------- 2010-11-16 10:30:00 John 2 2010-11-16 10:35:00 John 10 2010-11-16 10:40:00 John 0 2010-11-16 10:45:00 John 8 2010-11-16 10:50:00 John 0 2010-11-16 10:55:00 John 11</code>
注: コード内の WHERE …
部分は、実際の状況に応じてクエリ条件に置き換える必要があります。 さらに、結果を読みやすくするために、ORDER BY five_minute_interval
句が追加されています。 SQL ステートメントが改善され、5 分間隔でのグループ化がより正確に実装され、潜在的な丸めエラーが回避されます。
以上がカウント クエリのタイムスタンプを 5 分間隔にグループ化するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。