CREATE TABLE RIVUS.ROWNUM_TEST (
NO NUMBER(3,0),
NAME VARCHAR2(10)
) ;
...
SELECT NO, NAME FROM (
SELECT NO, NAME,
ROW_NUMBER() OVER (ORDER BY NO) RNUM
FROM ROWNUM_TEST
) WHERE RNUM BETWEEN 5 AND 10
ROW_NUMBER 関数 と PARTITION BY、ORDER BY の例
CATEGORY で GROUP BY した各グループセットを NO 列で並び替えた後で各カテゴリから 5〜10 番目を取得する。
(全カテゴリ数× 中間順位 5〜10 番を取得する)
CREATE TABLE RIVUS.ROWNUM_TEST (
CATEGORY NUMBER(3,0),
NO NUMBER(3,0),
NAME VARCHAR2(10)
) ;
...
SELECT NO, NAME FROM (
SELECT NO, NAME,
ROW_NUMBER() OVER (PARTITION BY CATGORY ORDER BY NO) RNUM
FROM ROWNUM_TEST
) WHERE RNUM BETWEEN 5 AND 10
SELECT USER_ID, USER_NAME, CREATED_ON, LINE_NO
FROM (
SELECT
USER_ID
,USER_NAME
,CREATED_ON
,ROW_NUMBER() OVER (ORDER BY CREATED_ON) LINE_NO
-- ↑ レコードを一意に決定できない
FROM
USER_MASTER
)
WHERE
LINE_NO >= 4
AND LINE_NO < 7
ORDER BY
CREATED_ON, USER_ID
SELECT USER_ID, USER_NAME, CREATED_ON, LINE_NO
FROM (
SELECT
USER_ID
,USER_NAME
,CREATED_ON
,ROW_NUMBER() OVER (ORDER BY CREATED_ON, USER_ID) LINE_NO
-- ↑ ここが違う
FROM
USER_MASTER
)
WHERE
LINE_NO >= 4
AND LINE_NO < 7
ORDER BY
CREATED_ON, USER_ID