ホームページ >データベース >mysql チュートリアル >MySQL で DateTime データを操作するときに /- 3 秒の GROUP BY 精度を達成するにはどうすればよいですか?

MySQL で DateTime データを操作するときに /- 3 秒の GROUP BY 精度を達成するにはどうすればよいですか?

Susan Sarandon
Susan Sarandonオリジナル
2024-10-24 06:59:02911ブラウズ

How to Achieve GROUP BY Precision of  /- 3 Seconds When Working with DateTime Data in MySQL?

MySQL GROUP BY DateTime (/- 3 秒精度)

問題ステートメント

指定ID、タイムスタンプ、タイトルの列を含むテーブルの場合、目標は、互いに 3 秒以内に発生するレコードをグループ化することです。このシナリオでは、タイムスタンプ 15:00:00 と 15:00:02 の行がグループ化されます。

ソリューション

ベースのチェーンの始まりを識別する代わりに、個々の行について、タイムスタンプのチェーンに焦点を当てましょう。

クエリ 1: チェーン開始タイムスタンプを決定する

<code class="mysql">SELECT DISTINCT Timestamp
FROM Table a
LEFT JOIN Table b
ON (b.Timestamp >= a.Timestamp - INTERVAL 3 SECONDS
    AND b.Timestamp < a.Timestamp)
WHERE b.Timestamp IS NULL

このクエリは、内部で上位にタイムスタンプがないタイムスタンプを返します。 3 秒。チェーンの始まりを示します。

クエリ 2: レコードとチェーン開始タイムスタンプの関連付け

<code class="mysql">SELECT Table.id, MAX(StartOfChains.TimeStamp) AS ChainStartTime
FROM Table
JOIN ([query #1]) StartOfChains
ON Table.Timestamp >= StartOfChains.TimeStamp
GROUP BY Table.id</code>

このクエリは行ごとに最大のチェーンを特定します。 -開始タイムスタンプ (行のタイムスタンプより前に発生)。

最終 GROUP BY 操作

<code class="mysql">SELECT COUNT(*) --or whatever
FROM Table
JOIN ([query #2]) GroupingQuery
ON Table.id = GroupingQuery.id
GROUP BY GroupingQuery.ChainStartTime</code>

このクエリは、クエリ 2 の GroupingQuery テーブルを使用して、以下に基づいてレコードをグループ化します。 ChainStartTime 列。各時間グループ内での集計計算が可能です。

以上がMySQL で DateTime データを操作するときに /- 3 秒の GROUP BY 精度を達成するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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