查询输出的差异,使用 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 只给您两行。
我的第一个查询如下:
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 只给您两行。