各位老师好,遇到了一个开窗函数 显示的伪劣,在最里层的时候显示的1 在最外层的时候RN变成了13
完整sql如下:
select * from (
select tmpub_FinInstitutionType.name Typename,
cdmc_financepay.contractid contractid,
tmpub_fininstitutions.name finname,
cdmc_financepay.pk_financepay as pk_financepay,
substr(cdmc_finexecute.busidate, 0, 10) busidate,
org_orgs.code orgscode,
org_orgs.name orgsname,
org_orgs.mnecode orgsmnecode,
(cdmc_finexecute.leftrepayamount * (fi_ratecode.yrate / 100)) LX,
to_number(to_date(substr(cdmc_financepay.contenddate, 0, 10),
'yyyy-mm-dd') -
to_date(substr(cdmc_financepay.loandate, 0, 10),
'yyyy-mm-dd')) ts,
substr(cdmc_financepay.loandate, 0, 10) || '/' ||
substr(cdmc_financepay.contenddate, 0, 10) dkqx, /*借款结束日期*/
cdmc_contract.contractname,
fi_ratecode.ratename,
ceil(monthS_BETWEEN(TO_date(substr(cdmc_financepay.contenddate,
0,
10),
'YYYY/MM/DD'),
TO_date(substr(cdmc_financepay.loandate, 0, 10),
'YYYY/MM/DD')) / 12) AS DIFF_YEARS,
(case
when ceil(monthS_BETWEEN(TO_date(substr(cdmc_financepay.contenddate,
0,
10),
'YYYY/MM/DD'),
TO_date(substr(cdmc_financepay.loandate,
0,
10),
'YYYY/MM/DD')) / 12) > 5 then
(select fi_rate.yrate
from fi_ratecode fi_rate
where fi_rate.rateid = ('5年以上LPR'))
else
(select fi_rate.yrate
from fi_ratecode fi_rate
where fi_rate.rateid = ('5年以下LPR'))
end) LPR,
(fi_ratecode.yrate - (case
when ceil(monthS_BETWEEN(TO_date(substr(cdmc_financepay.contenddate,
0,
10),
'YYYY/MM/DD'),
TO_date(substr(cdmc_financepay.loandate,
0,
10),
'YYYY/MM/DD')) / 12) > 5 then
(select fi_rate.yrate
from fi_ratecode fi_rate
where fi_rate.rateid = ('5年以上LPR'))
else
(select fi_rate.yrate
from fi_ratecode fi_rate
where fi_rate.rateid = ('5年以下LPR'))
end) * 100) cy,
(case
when cdmc_finexecute.repayamount is null then
cdmc_financepay.loanmny /*放款金额*/
else
cdmc_finexecute.leftrepayamount
end) leftrepayamount,
row_number() over(partition by cdmc_finexecute.pk_financepay, substr(cdmc_finexecute.busidate, 0, 4) order by cdmc_finexecute.busidate desc) as rn
from cdmc_financepay cdmc_financepay /*贷款放款*/
left join cdmc_finexecute cdmc_finexecute /*执行情况*/
on cdmc_finexecute.pk_financepay = cdmc_financepay.pk_financepay
left join tmpub_fininstitutions
on tmpub_fininstitutions.pk_fininstitution =
cdmc_financepay.fininstitutionid
left outer join org_orgs
on org_orgs.pk_org = cdmc_financepay.pk_org
left join cdmc_contract
on cdmc_financepay.contractid = cdmc_contract.pk_contract
left outer join fi_ratecode
on cdmc_financepay.pk_rate = fi_ratecode.pk_ratecode
left join tmpub_FinVar
on tmpub_FinVar.pk_finvariety = cdmc_contract.transacttype
left join tmpub_FinInstitutionType
on tmpub_FinInstitutionType.pk_fininstitutiontype =
tmpub_fininstitutions.pk_fininstitutiontype
where cdmc_financepay.dr = '0'
and nvl(cdmc_finexecute.dr, 0) <> '1'
and cdmc_financepay.busistatus /*单据状态*/
in (1, 2)
--and cdmc_contract.contractname='20230516集团本部在中国银行借款一年期1亿元'
) temp
where temp.contractname='20230516集团本部在中国银行借款一年期1亿元'
--and temp.rn=1
;