[英]Sequential numbering of data sequence
我有下表:
create table test_seq (id int, obs int);
insert into test_seq values (1,1);
insert into test_seq values (2,1);
insert into test_seq values (3,1);
insert into test_seq values (4,0);
insert into test_seq values (5,0);
insert into test_seq values (6,1);
insert into test_seq values (7,1);
insert into test_seq values (8,0);
insert into test_seq values (9,0);
insert into test_seq values (10,1);
insert into test_seq values (11,0);
有SQL方法,如何創建以下輸出?
id obs seq_num
1 1 1
2 1 1
3 1 1
4 0 2
5 0 2
6 1 3
7 1 3
8 0 4
9 0 4
10 1 5
11 0 6
每當列obs中的值與前一行(按id排序)相比更改時,seq_num增加1。 我可以在Excel中輕松解決這個問題(使用簡單的if公式),但在postgres中無法弄清楚這一點。
使用分析函數,如:
select id, obs, sum(cnt) over (order by id) as seq_num
from (
select id, obs, case when obs <> (lag(obs) over (order by id)) then 1 else 0 end as cnt
from test_seq
)
order by id;
我弄清楚了:
with t as (
select
id,
obs,
case when lag(obs,1) over (order by id) <> obs then 1 else 0 end as test
from
tmp.test_seq
)
select
*,
sum(test) over (order by id rows between unbounded preceding and current row) + 1
from
t
你可以使用rownumber來做到這一點。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.