ホームページ >データベース >mysql チュートリアル >カウント クエリのタイムスタンプを 5 分間隔にグループ化するにはどうすればよいですか?

カウント クエリのタイムスタンプを 5 分間隔にグループ化するにはどうすればよいですか?

Linda Hamilton
Linda Hamiltonオリジナル
2025-01-15 08:15:45800ブラウズ

How to Group Timestamps into 5-Minute Intervals for Count Queries?

カウント クエリのタイムスタンプを 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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。