我的示例输入表是:
x y
1 a
3 b
5 b
4 a
2 a
6 b
我想得到这个:
x y z
1 a 1
2 a 1
3 b 2
4 a 3
5 b 4
6 b 4
首先必须按x
排序所有行,然后y
中的每个本地值组都应收到其唯一编号(例如z
)。最后我想按z
进行分区。尽管操作似乎很简单,但我无法提出查询。
答案 0 :(得分:1)
您可以使用lag()
然后累积总和来执行此操作:
select x, y,
sum(case when y = prev_y then 0 else 1 end) over (order by x) as z
from (select t.*,
lag(y) over (order by x) as prev_y
from t
) t;