为每个本地组分配唯一值

时间:2017-09-21 12:16:02

标签: sql hive

我的示例输入表是:

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进行分区。尽管操作似乎很简单,但我无法提出查询。

1 个答案:

答案 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;