Impala SQL:根据排序类型和年份对记录进行分组

Impala SQL: Grouping records based on sequenced type and year

给定以下原始数据,您将如何对它们进行分组以在所需输出中具有排名字段: 内置的 dense_rank 和等级函数在这里似乎不起作用,因为它们最终总是将类型 B 分组在一起,而不是将它们分成 2 个等级。请指教!

原始数据:

ID Type Year
1   A   1998
2   B   1999
3   B   2000
4   C   2001
5   B   2002
6   B   2004
7   B   2020

期望的输出:

ID Type Year Rank
1   A   1998  1
2   B   1999  2
3   B   2000  2
4   C   2001  3
5   B   2002  4
6   B   2004  4
7   B   2020  4

使用lag()查看之前的值,然后在值发生变化时进行累计计算:

select t.*,
       sum(case when type = prev_type then 0 else 1 end) over (order by id) as rank
from (select t.*, lag(type) over (order by id) as prev_type
      from t
     ) t;