hive 取另一列最大值对应的值

yquaqz18  于 2022-11-23  发布在  Hive
关注(0)|答案(1)|浏览(158)

我需要找到与另一列的最大值对应的值。
我的数据如下:
| 组群|子群|子组_2|值_a|值_B|日期|
| - -|- -|- -|- -|- -|- -|
| A级|一百零一|一个|二百|一百零一|二○二二○三零一|
| A级|一百零二|一个|一百零五|九十|二○二二○三零一|
| A级|一百零三|2个|九十|二百零二|二○二二○三零一|
| A级|二一一|2个|七十五|一百零七|二○二二○三零一|
| B|二一二|一个|九十一|六十五|二○二二○三零一|
| B|二百一十三|一个|一百七十五|一百零一|二○二二○三零一|
我需要将数据格式化如下:
| 组群|子组_2|最大值a|值_B|日期|
| - -|- -|- -|- -|- -|
| A级|一个|二百|一百零一|二○二二○三零一|
| A级|2个|九十|二百零二|二○二二○三零一|
| B|一个|一百七十五|一百零一|二○二二○三零一|
我可以通过一个group by很容易地实现这个格式,但是我必须聚合value_b才能做到这一点,这并不能给予我需要的结果。
我知道我可以使用rank()而不是partition by,但它似乎没有提供我需要的格式。
这是我在下面使用的查询,但是它只提供了一个subgroup_2的最大值,而不是每个subgroup_2的最大值:

select group, subgroup_2, max_value_a, value_b, date
from
(
select a.group, a.subgroup_2, a.max_value_a, a.value_b, a.date,
       rank() over(partition by a.group, subgroup_2, a.date order by a.max_value_a desc) as rnk
  from table_1 a
)s
where rnk=1
aydmsdu9

aydmsdu91#

您要在此处使用ROW_NUMBER

SELECT group, subgroup_2, value_a AS max_value_a, value_b, date
FROM
(
    SELECT group, subgroup_2, value_a, value_b, date,
           ROW_NUMBER() OVER (PARTITION BY group, subgroup_2 ORDER BY value_a DESC) rn
    FROM table_1
) t
WHERE rn = 1;

相关问题