Home > Software design >  How to add an iterative id column which goes up when a value in another column resets to 1 in Postgr
How to add an iterative id column which goes up when a value in another column resets to 1 in Postgr

Time:06-21

I have a SQL table which has two columns called seq and sub_seq as seen below. I would like to add a third column called id, which goes up by 1 every time the sub_seq starts again at 1 as shown in the table below.

seq sub_seq id
1 1 1
2 2 1
3 3 1
4 4 1
5 5 1
6 1 2
7 2 2
8 3 2
9 1 3
10 2 3
11 3 3
12 4 3
13 5 3
14 6 3
15 7 3

I could write a solution using plpgsql, however I would like to know if there is a way of doing this in standard SQL. Any help would be greatly appreciated.

CodePudding user response:

If sub_seq is always a running sequence then you can use the DENSE RANK function and order over the differences of two columns, assuming it will consistently uniform.

SELECT seq, sub_Seq, DENSE_RANK() OVER (ORDER BY seq-sub_Seq) AS id
FROM tableDemo

This solution is based on the sample data you have provided, I think more sample data would be helpful to check the whole scenario.

  • Related