Oracle11gの「選択」クエリにオフセットを追加する方法。制限を追加する方法は、たとえばrownum <= 5
この質問は重複していません。私はすでに他の質問を確認しており、私の質問とは関係ありません。
では、Oracle 11gでオフセットを追加するにはどうすればよいですか?
OFFSET
を指定することにより、12c
で簡単に実行できます。
12c
では、
SELECT val
FROM table
ORDER BY val
OFFSET 4 ROWS FETCH NEXT 4 ROWS ONLY;
11g
以前で同じことを行うには、ROWNUM
をそれぞれinner query
とouter query
の2回使用する必要があります。
11g
の同じクエリ、
SELECT val
FROM (SELECT val, rownum AS rnum
FROM (SELECT val
FROM table
ORDER BY val)
WHERE rownum <= 8)
WHERE rnum > 4;
ここで、OFFSET
は4です。
そのためにROW_NUMBER関数を使用できます。
多分これは役立ちます:
SELECT *
FROM(SELECT t.*,
ROW_NUMBER() OVER (ORDER BY ...) rn -- whatever ordering you want
FROM your_table t
)
WHERE rn >= ... -- your offset
お役に立てば幸いです
Oracleで関数LAGまたはLEADを使用する
The LAG function is used to access data from a previous row
The LEAD function is used to return data from the next row
使用法:-
LAG (value_expression [,offset] [,default]) OVER ([query_partition_clause] order_by_clause)
LEAD (value_expression [,offset] [,default]) OVER ([query_partition_clause] order_by_clause)
例については このリンク を見つけてください