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;
给定以下原始数据,您将如何对它们进行分组以在所需输出中具有排名字段: 内置的 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;