集計対象の連続する行グループの特定
問題:
startt と startt の最小値と最大値を取得する特定の行為値の連続する行に対して終了します。それぞれの一意の名前は、行為の発生の個別のシーケンスを定義します。入力には行識別用の追加列はありません。
アプローチ:
各名前-行為グループ内で行の識別を確立するには、行番号を利用します:
row_number() over (partition by name, act order by rn) as act_n row_number() over (partition by name order by rn) as rn
これらの行番号により、グループ内の行を区別し、行為の連続した範囲を識別できます。値。
最小値と最大値の集計:
各名前と動作の組み合わせに対して必要な出力を見つけるには、連続する行グループ内のデータを集計します。重要な計算は 2 つの行番号の差です。
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 中国語 Web サイトの他の関連記事を参照してください。