0
当我将包含DENSE_RANK()
的查询合并为IN
子句的输入时,我遇到了一些奇怪的结果。与DENSE_RANK和IN的奇怪行为
为了证明我把它们分开了;
此查询
select *
from ALL_QUOTE
where ID in ('G002WMLS')
返回1个结果:
ID LongID StartDate EndDate
G002WMLS 67888 01/10/2011 30/11/2011
此查询
select ID
from (
select LongId, ID, DENSE_RANK() over (partition by LongId order by end_date desc, substr(ID, 2, 7) desc, start_date desc) d
from WithoutPD
)
where d = 1 and LongId = '67888'
也返回1个结果:
ID
G002WMLS
但是当我结合在一起他们两个:
select *
from ALL_QUOTE
where ID in (
select ID
from (
select LongId, ID, DENSE_RANK() over (partition by LongId order by end_date desc, substr(ID, 2, 7) desc, start_date desc) d
from WithoutPD
)
where d = 1
)
and LongId = '67888';
我结束了两个结果:
ID LongID StartDate EndDate
G002MIMQ 67888 01/10/2010 30/09/2011
G002WMLS 67888 01/10/2011 30/11/2011
我简直不明白如何G002MIMQ
被包含在结果中。我使用的是Oracle 11.2.0.1.0,但是我知道这可能是我误解的通用SQL功能。
希望你能对这个奇怪的问题有所了解。
我原本以为是问题太多,但我提取从该条款的所有结果,并使用Excel中只检查' G002WMLS'存在于结果中。 –
数据集中是否有空值?如果用联接替换子查询中的'in'(请参阅上面的编辑),则查询是否可以工作 – podiluska
没有空ID,如果我在子查询中加入IN,我会得到两个结果一样)。 –