句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';
最終的に 2 つの結果が得られます。
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 機能である可能性があることを理解しています。
この奇妙な問題に光を当てていただければ幸いです。