如何在连续序列断开时创建重新开始的等级?
(点击下面的图片)
下表表示用户的流程。他的总旅程包括8个步骤,页面显示他在每个步骤中所在的页面。我想创建一个排名,在页面更改时重置。棘手的部分是让排名(第1页的第6步)重置为1而不是继续4.按页面分区是不够的,因为我希望在用户更改回第1页并继续时重新开始排名。该表包含了我想要实现的结果,我只是不知道如何在Postgres中执行此操作。
答案 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值之间的差异如何标识具有相同值的连续行。