首頁 >資料庫 >mysql教程 >如何找出活動組內連續行的最小和最大開始時間和結束時間?

如何找出活動組內連續行的最小和最大開始時間和結束時間?

Susan Sarandon
Susan Sarandon原創
2025-01-03 01:03:39706瀏覽

How to Find Minimum and Maximum Start and End Times for Consecutive Rows within Activity Groups?

找出連續行的最小值和最大值

您有一個資料集,其中的行代表活動,按名稱分組並按行號排序。目標是找到每個活動組中連續行的開始時間和結束時間的最小值和最大值。

使用行號差異的解決方案:

一種方法是使用行號之間的差異來識別相同的連續行活動:

with cte as (
  select *,
    row_number() over (partition by name order by rn) as seqnum_n,
    row_number() over (partition by name, act order by rn) as seqnum_na
  from input
)
select name, act, min(startt), max(endd)
from cte
group by seqnum_n - seqnum_na, name, act;

說明:

  1. 透過新增兩個附加資料列建立一個名為cte 的公用表表達式 (CTE):

    • seqnum_n:每個名稱中的行號組。
    • seqnum_na:每個名稱活動群組內的行號。
  2. 計算 seqnum_n 和 seqnum_na 之間的差異。每個活動中的連續行具有相同的差值。
  3. 以差值、名稱和活動分組以聚合最小值和最大值。

以上是如何找出活動組內連續行的最小和最大開始時間和結束時間?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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