hive 使用rank()和CTE时查询输出的差异

1l5u6lss  于 2022-11-05  发布在  Hive
关注(0)|答案(1)|浏览(134)

我的第一个查询如下所示:

select trans.* from
  ( select 
   acc_num,
   acc_type,
   trans_amount,
   load_date,
   rank() over(partition by acc_num order by load_date) as rk
   from monetary
   where rat_code = 123
 ) trans

where trans.rk =1;

第二个查询如下所示

with a as (
select *, 
row_number() over(partition by acc_num order by load_date) as rn
from monetary
where rat_code = 123 )
select 
acc_num,
acc_type,
trans_amount,
load_date
from a
where rn =1;

任何人都可以请帮助我,我得到不同数量的记录为两个案件。虽然查询是相同的。

jvidinwx

jvidinwx1#

这是因为rank和row_number之间存在差异。以下示例将显示

Accno, dt, rank_col, rownum_col
100, 2-jun-2022, 1, 1
100, 3-jun-2022, 1, 2
100, 1-jul-2022, 1, 3
54, 2-jun-2022, 4, 1
54, 1-jul-2022, 4, 2

在上面的示例中,可以看到row number将计算唯一的行ID。而rank将以连续的方式提供唯一的ID。从上面的示例中可以看到,rank=1将提供3行,而rownum=1仅提供2行。

相关问题