我想计算下表中已排序子组的数量:
id nmb
1 11
2 12
3 13
4 22
5 23
6 31
7 32
8 33
9 11
10 12
11 13
12 12
13 13
14 21
15 22
16 11
17 12
18 13
19 14
想在postgresql 8.4中获得类似的东西:
id nmb local
1 11 1
2 12 1
3 13 1
4 22 1
5 23 1
6 31 1
7 32 1
8 33 1
9 11 2
10 12 2
11 13 2
12 12 3
13 13 3
14 21 3
15 22 3
16 11 4
17 12 4
18 13 4
19 14 4
编辑:“本地”专栏的最后几个数字是错误的。校正!
谢谢。
答案 0 :(得分:2)
我虽然终于理解了你想要的东西,但却在不断增长价值观:
select id, nmb,
sum(flag)
over (order by id
rows unbounded preceding) as local
from
(
select
id, nmb,
case
when lag(nmb)
over (order by id) < nmb
then 0
else 1
end as flag
from t
) as dt
order by id
但是第4组不适合
编辑:现在它们适合: - )
答案 1 :(得分:1)
select
id, nmb,
row_number() over(partition by nmb order by id)
from t
order by id
答案 2 :(得分:1)
您似乎正在尝试枚举组,其中组的起始值nmb
低于上一行(“{1}}订单定义的”上一个“。
我们的想法是使用id
来确定群组的开头。然后获取累积总和以获得所需的组标识符:
lag()