为什么rownum上的sql查询都给出了不同的结果

Kum*_*mar 2 sql oracle plsql max rownum

>SELECT instmax  
FROM  
  (SELECT instmax,  
     rownum r  
  FROM  
    ( SELECT * FROM pswlinstmax ORDER BY instmax DESC NULLS LAST  
    )   
  )  
WHERE r = 2;  

INSTMAX  
-------  
1049  

>SELECT instmax  
FROM  
  (SELECT instmax,  
    rownum  
  FROM  
    (SELECT * FROM pswlinstmax ORDER BY instmax DESC  
    )  
  )  
WHERE rownum=2;  


**NO RETURNED ROW**  
Run Code Online (Sandbox Code Playgroud)

为什么会给出不同的结果?我想对此进行详细解释.

Mar*_*and 8

因为secont时间,rownum不是内部SQL的rownum而是外部的rownum!

这就是为什么你需要"重命名"它,以便它变得"固定"的原因.

否则,rownum = 2过滤器永远不匹配,因为每一行都是第一行.