【记录】ORACLE ROW_NUMBER() 单次查询和关联其他表查询结果不一致

问题SQL

单独查询SQL

SELECT * FROM (
	SELECT D_BUSI_DATE,C_ACC_CODE,N_YE,  
		ROW_NUMBER() OVER(PARTITION BY C_ACC_CODE ORDER BY d_date DESC) rn
	FROM T1 
	WHERE d_date <= DATE 'XXXX-XX-XX'
) WHERE RN = 1;

关联其他表SQL

SELECT T1.D_BUSI_DATE,T1.C_ACC_CODE,T1.N_YE,T2.* FROM(
	SELECT * FROM (
		SELECT 
			D_BUSI_DATE,C_ACC_CODE,N_YE, 
			ROW_NUMBER() OVER(PARTITION BY C_ACC_CODE ORDER BY d_date DESC) rn
		FROM T1 
		WHERE d_date <= DATE 'XXXX-XX-XX'
	) WHERE RN = 1
 ) T1
 LEFT JOIN T2 ON T2.C_ACC_CODE = T1.C_ACC_CODE AND T2.C_ACC_TYPE= T1.C_ACC_TYPE;

问题描述

单独查询和关联表之后的查询结果不一致

单次查询:

D_BUSI_DATEC_ACC_CODEN_YE
2023-05-0510000080.00

关联表查询:

D_BUSI_DATEC_ACC_CODEN_YE
2023-04-0510000065.00

产生原因

  • 当PARTITION BY和ORDER BY 字段不唯一,即有重复数据时,导致两次排序结果不一致,取RN = 1时数据不一致
SQL:
	ROW_NUMBER() OVER(PARTITION BY C_ACC_CODE ORDER BY d_date DESC) 
修改后:
	ROW_NUMBER() OVER(PARTITION BY C_ACC_CODE ORDER BY d_date,D_BUSI_DATE DESC) 

记录

目前在11.2版本上并未复现该问题,为客户现场问题,猜测是分组字段和排序字段数据不唯一导致,但目前并不清楚为什么单独查询和关联表之后查询结果不一致。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值