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 サイトの他の関連記事を参照してください。