MySQL GROUP MENGIKUT DateTime dengan /- Ketepatan 3 Saat
Pernyataan Masalah
Diberi jadual dengan lajur untuk ID, cap masa dan tajuk, matlamatnya adalah untuk mengumpulkan rekod yang berlaku dalam masa 3 saat antara satu sama lain. Dalam senario ini, baris dengan cap masa 15:00:00 dan 15:00:02 akan dikumpulkan bersama.
Penyelesaian
Daripada mengenal pasti permulaan berasaskan rantai pada baris individu, mari fokus pada merantai cap masa.
Pertanyaan 1: Tentukan Cap Masa Permulaan Rantaian
<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
Pertanyaan ini mengembalikan cap masa yang tidak mempunyai cap masa di atasnya dalam 3 saat, menunjukkan permulaan rantai.
Pertanyaan 2: Kaitkan Rekod dengan Cap Masa Permulaan Rantaian
<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>
Untuk setiap baris, pertanyaan ini mengenal pasti rantaian terbesar -cap masa permulaan (berlaku sebelum cap masa baris).
KUMPULAN Akhir MENGIKUT Operasi
<code class="mysql">SELECT COUNT(*) --or whatever FROM Table JOIN ([query #2]) GroupingQuery ON Table.id = GroupingQuery.id GROUP BY GroupingQuery.ChainStartTime</code>
Pertanyaan ini menggunakan jadual GroupingQuery daripada Pertanyaan 2 untuk mengumpulkan rekod berdasarkan lajur ChainStartTime, membolehkan pengiraan agregat dalam setiap kumpulan masa.
Atas ialah kandungan terperinci Bagaimana untuk Mencapai KUMPULAN MENGIKUT Ketepatan /- 3 Saat Apabila Bekerja dengan Data DateTime dalam MySQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!