ギャップとアイランドのある連続行の最小値と最大値を求める
行で表されるイベントのシーケンスを含む順序付きデータセットのコンテキスト内テーブルの場合、タスクは、同じイベント タイプを共有する連続する行の最小時間間隔と最大時間間隔を決定することです。この問題は、ギャップやアイランドを含むデータを扱う場合に発生し、従来の集計方法では不十分です。
入力の理解
入力テーブルは次の列で構成されます:
連続するグループの識別
連続する行のグループを識別するには同じイベント タイプの場合、イベント タイプの行番号と全体の行番号の差を計算します。番号付け:
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 を減算すると、イベント タイプ内の行の連続する各サブセットのグループ番号を表す新しい列が作成されます。
グループ番号による集計
グループ番号を使用特定できたら、開始時刻と終了時刻を集計して、それぞれの最小値と最大値を見つけることができます。 group:
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 中国語 Web サイトの他の関連記事を参照してください。