Postgres - 基于连续值排名

时间:2017-12-05 13:04:49

标签: postgresql ranking row-number

如何在连续序列断开时创建重新开始的等级?

(点击下面的图片)

下表表示用户的流程。他的总旅程包括8个步骤,页面显示他在每个步骤中所在的页面。我想创建一个排名,在页面更改时重置。棘手的部分是让排名(第1页的第6步)重置为1而不是继续4.按页面分区是不够的,因为我希望在用户更改回第1页并继续时重新开始排名。该表包含了我想要实现的结果,我只是不知道如何在Postgres中执行此操作。

Table Rank

1 个答案:

答案 0 :(得分:1)

您可以使用行号方法的差异分配组,然后使用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;

要了解其工作原理,请查看子查询的结果。您将看到两个seqnum值之间的差异如何标识具有相同值的连续行。