首頁 >資料庫 >mysql教程 >如何在相同行為值的連續子集中找到最小和最大開始值和結束值?

如何在相同行為值的連續子集中找到最小和最大開始值和結束值?

Barbara Streisand
Barbara Streisand原創
2024-12-22 12:36:14196瀏覽

How to Find Minimum and Maximum startt and endd Values within Consecutive Subsets of Identical act Values?

連續行子集最小值和最大值

尋求一個查詢,該查詢識別並聚合相同行為值的連續子集中的起始值和結束值,這個問題深入研究了資料操作和聚合技術。

為了解決這個問題,我們可以利用以下方法步驟:

  1. 分配唯一行號:
    按名稱對資料進行分區,並為每個名稱組中的每個行為值分配連續的行號。這使我們能夠區分連續的行。
  2. 計算行差異:
    計算每個動作的行號之間的差異(即 rn - act_n)。此差異表示連續子集中的 Act 值的位置。
  3. 按 Act 連續位置分組:
    使用行差異作為分組鍵聚合資料。這會將屬於同一連續子集的行組合在一起。
  4. 找出最小值和最大值:
    在每個分組子集中,計算 startt 和 endd 的最小值和最大值。這提供了所需的輸出。

以下查詢實作了此方法:

with cte as (
  select 
    name
    ,act
    ,row_number() over (partition by name order by name,startt) rn
    ,row_number() over (partition by name, act order by name,startt) act_n
    ,startt
    ,endd
  from input
)
select
    name
    ,act
    ,min(startt) startt
    ,max(endd)   endd
    ,min(rn)     min_rn
    ,max(rn)     max_rn
from cte
group by 
    name
    ,act
    ,rn - act_n
order by 
    name
    ,min(rn)

以上是如何在相同行為值的連續子集中找到最小和最大開始值和結束值?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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