辨識連續行組進行聚合
問題:
檢索startt 和最大值end 表示特定行為值的連續行。每個唯一的名稱定義了不同的行為發生順序。輸入不提供用於行標識的附加列。
方法:
為了在每個名稱-行為群組中建立行標識,我們使用行號:
row_number() over (partition by name, act order by rn) as act_n row_number() over (partition by name order by rn) as rn
這些行號使我們能夠區分組內的行並識別連續的行為範圍
聚合最小值和最大值:
為了找到每個名稱-行為組合所需的輸出,我們聚合連續行組中的資料。關鍵的計算是兩個行號之間的差異:
rn - act_n diff
這個差異代表每個組內的位置,使我們能夠確定連續的範圍。
select name, act, min(startt) startt, max(endd) endd from ( 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 @t ) group by (rn - act_n), name, act order by name;
此查詢對資料依行號差異,提供所需的輸出。
以上是如何根據特定的 Act 值找出連續行的最小值和最大值?的詳細內容。更多資訊請關注PHP中文網其他相關文章!