2016-07-02 12 views
-1

Oracle SQL Developerでは、一部の機能が動作しない理由を理解できません。 2行目を選択しようとしていますが、Oracleは空の行だけをヘッダーに戻します。Oracle SQL Developerの機能が動作しない

= 2の行を指定すると、行番号1を使用すると、Oracleは最初の行を返します.Oracleは行1と2を返します。逆の場合も行番号2を返します最初の行のためにそれは1ROWNUMに対してテストされ、この場合には、ROWNUM = 2がfalseで、行が破棄されていますので、リターンエラー

select * 
from PAS.TRANSACTION 
where msisdn in ('1112684179') 
    and rownum = 2 
order by INSERTION_DATE DESC; 
+1

この記事は、Ask Tom(http://www.oracle.com/technetwork/issue-archive/2006/) 06-sep/o56asktom-086197.html)は、rownumに関する問題を非常によく説明しています。imho ROW_NUMBER、DENSE_RANKなどの分析関数を調べる必要があります。例: 'ROW_NUMBER()OVER(挿入_日付の順序によるmsisdnの順​​序によるパーティション) ' – LukStorms

+0

は論理的な矛盾と思われます。もしあなたが1行を持っていれば、rownum = 2でどのように行を得ることができますか? – scaisEdge

+0

いいえ私は各番号の下に多くの行を持っていません。ただ1行だけのエントリはありません。その番号の下に私は約5つのレコードを持っていました –

答えて

0

を取得し、オフセットは機能していません。その行は破棄されたため、ROWNUMは割り当てられず、代わりに次の行が同じROWNUM1に対してテストされます。サイクルが繰り返され、ROWNUM = 2はfalseであり、行は破棄されます。繰り返し、広告の怠惰とすべての行がWHEREテストに失敗し、破棄されます。

2番目の行を取得する場合は、すべての行にインラインビュー内のROWNUMを割り当ててから処理した後、2番目の行を選択する必要があります。また

SELECT *        -- Finally, in the outer select get 
            -- the 2nd row 
FROM (
    SELECT t.*,      -- Second, having ordered the rows 
     ROWNUM AS rn    -- then generate the row numbers 
    (
    select *       -- Fisrt, in the inner-most inline 
    from PAS.TRANSACTION   -- view, select the rows you want 
    where msisdn in ('1112684179') -- and apply the order. 
    order by INSERTION_DATE DESC 
) 
) 
WHERE rn = 2; 

(、クエリが発注される前ROWNUM疑似列がを生成していることに注意してください - あなたはそれがその順序に基づいて、第1および数を注文したい場合は、あなたが以内に注文する必要が上記の例のように、次のステップでROWNUMを生成してください。

関連する問題