web-dev-qa-db-ja.com

Oracle 11gの「選択」クエリにオフセットを追加するにはどうすればよいですか?

Oracle11gの「選択」クエリにオフセットを追加する方法。制限を追加する方法は、たとえばrownum <= 5この質問は重複していません。私はすでに他の質問を確認しており、私の質問とは関係ありません。

では、Oracle 11gでオフセットを追加するにはどうすればよいですか?

11
sasori

OFFSETを指定することにより、12cで簡単に実行できます。

12cでは、

SELECT val
FROM   table
ORDER BY val
OFFSET 4 ROWS FETCH NEXT 4 ROWS ONLY;

11g以前で同じことを行うには、ROWNUMをそれぞれinner queryouter 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です。

21
Lalit Kumar B

そのためにROW_NUMBER関数を使用できます。

多分これは役立ちます:

SELECT *
  FROM(SELECT t.*,
              ROW_NUMBER() OVER (ORDER BY ...) rn -- whatever ordering you want
         FROM your_table t
      )
 WHERE rn >= ... -- your offset

お役に立てば幸いです

2
DirkNM

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)

例については このリンク を見つけてください

0
psaraj12