2017-12-05 16 views
1

連続したシーケンスが壊れたときに1で再起動するランクを作成する方法はありますか?Postgres - 連続した値に基づいてランク付け

(下の画像をクリックしてください)

次の表は、ユーザーの流れを表しています。彼の総旅程は8つのステップから成っています。ページは各ステップでどのページにいるかを示します。ページを変更したときにリセットされるランクを作成したいと思います。面倒な部分はランクを上げて(ステップ6、ページ1)、1にリセットし、4では続行しないでください。ページの分割だけでは不十分です。ユーザーがPage 1に戻って継続するとランクを再開します。テーブルには私が達成したい結果が含まれていますが、私はPostgresでこれを行う方法を知らないだけです。

Table Rank

+0

書式付きテキストをコピー/貼り付けてください - 画像を投稿しないでください。また、与えられたデータの期待される結果サンプルは、しばしばより良い説明です –

答えて

0

あなたは、行番号のアプローチの違いを利用してグループを割り当て、その後、順位を割り当てることrow_number()を使用することができます。

select step, page, 
     row_number() over (partition by page, seqnum - seqnum_p order by step) as ranking 
from (select t.*, 
      row_number() over (order by step) as seqnum, 
      row_number() over (partition by page order by step) as seqnum_p 
     from t 
    ) t; 

この動作理由を理解するには、サブクエリの結果を見て。 2つのseqnum値の違いによって、同じ値を持つ連続した行がどのように識別されるかがわかります。

関連する問題