首頁 >資料庫 >mysql教程 >如何找到具有間隙和島嶼的連續事件的最小和最大時間間隔?

如何找到具有間隙和島嶼的連續事件的最小和最大時間間隔?

Linda Hamilton
Linda Hamilton原創
2024-12-17 21:02:14799瀏覽

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

找出具有間隙和島嶼的連續行的最小值和最大值

在包含由行表示的事件序列的有序數據集的上下文中在一個表中,任務是確定共享相同事件類型的連續行的最小和最大時間間隔。當處理涉及間隙和島嶼的資料時,就會出現這個問題,使得傳統的聚合方法不夠用。

瞭解輸入

輸入表由下列組成:

  • 名稱:每個的唯一識別碼person
  • act:事件類型,「睡眠」或「喚醒」
  • rn:每個人的事件序列中的行號
  • startt:開始時間event
  • endd:事件的結束時間

辨識連續組

識別連續的行組對於相同的事件類型,我們計算事件類型的行號與整個行之間的差異編號:

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

這些新列seqnum_na 和 seqnum_n 分別表示事件類型的序號和總體序號。從 seqnum_n 中減去 seqnum_na 會建立一個新列,該列表示事件類型中每個連續行子集的群​​組編號。

與群組編號的聚合

與群組編號確定後,我們可以匯總開始時間和結束時間,以找到每個時間的最小值和最大值組:

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;

透過按群組編號以及名稱和事件類型進行分組,我們可以有效地識別和聚合每個子集中的連續行,從而提供所需的最小和最大時間間隔。

以上是如何找到具有間隙和島嶼的連續事件的最小和最大時間間隔?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn