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

Difference in the output of query, using rank() and CTE

我的第一个查询如下:

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;

任何人都可以帮助我,我在这两种情况下得到的记录数量不同。 尽管查询相同。

因为排名和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

在上面的示例中,您可以看到行号将计算唯一的行 ID。而排名给出了唯一的 id,但是以连续的方式。您可以从上面的示例中看到,rank=1 给您 3 行,但 rownum=1 只给您两行。