Rumah > pangkalan data > tutorial mysql > Bagaimana Mencari Selang Masa Minimum dan Maksimum untuk Acara Berturut-turut dengan Jurang dan Pulau?

Bagaimana Mencari Selang Masa Minimum dan Maksimum untuk Acara Berturut-turut dengan Jurang dan Pulau?

Linda Hamilton
Lepaskan: 2024-12-17 21:02:14
asal
796 orang telah melayarinya

How to Find Minimum and Maximum Time Intervals for Consecutive Events with Gaps and Islands?

Mencari Minimum dan Maksimum untuk Baris Berturut-turut dengan Jurang dan Pulau

Dalam konteks set data tersusun yang mengandungi jujukan peristiwa yang diwakili oleh baris dalam jadual, tugasnya adalah untuk menentukan selang masa minimum dan maksimum untuk baris berturut-turut yang berkongsi jenis acara yang sama. Masalah ini timbul apabila berurusan dengan data yang melibatkan jurang dan pulau, menjadikan kaedah pengagregatan tradisional tidak mencukupi.

Memahami Input

Jadual input terdiri daripada lajur berikut:

  • nama: Pengecam unik untuk setiap orang
  • bertindak: Jenis acara, sama ada "tidur" atau "bangun"
  • rn: Nombor baris dalam urutan acara setiap orang
  • startt: Masa mula acara
  • tamat: Masa tamat acara

Mengenal pasti Kumpulan Berturut-turut

Untuk mengenal pasti kumpulan baris berturut-turut dengan jenis acara yang sama, kami mengira perbezaan antara nombor baris untuk jenis acara dan baris keseluruhan penomboran:

row_number() over (partition by name, act order by rn) as seqnum_na
row_number() over (partition by name order by rn) as seqnum_n
Salin selepas log masuk

Lajur baharu ini, seqnum_na dan seqnum_n, masing-masing mewakili nombor jujukan untuk jenis acara dan nombor jujukan keseluruhan. Menolak seqnum_na daripada seqnum_n mencipta lajur baharu yang mewakili nombor kumpulan untuk setiap subset berturut-turut baris dalam jenis acara.

Pengagregatan dengan Nombor Kumpulan

Dengan nombor kumpulan dikenal pasti, kita boleh mengagregat masa mula dan tamat untuk mencari minimum dan maksimum bagi setiap satu kumpulan:

select name, act, min(startt) as startt, max(endd) as endd
from (select i.*,
             row_number() over (partition by name, act order by rn) as seqnum_na,
             row_number() over (partition by name order by rn) as seqnum_n
      from input i
     ) i
group by (seqnum_n - seqnum_na), name, act;
Salin selepas log masuk

Dengan mengumpulkan mengikut nombor kumpulan ini bersama-sama dengan nama dan jenis acara, kami mengenal pasti dan mengagregatkan baris berturut-turut dengan cekap dalam setiap subset, memberikan selang masa minimum dan maksimum yang dikehendaki.

Atas ialah kandungan terperinci Bagaimana Mencari Selang Masa Minimum dan Maksimum untuk Acara Berturut-turut dengan Jurang dan Pulau?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan