CREATE TABLE table_order_by
(
id1 NUMBER(2,0)
);
INSERT INTO table_order_by (id1) VALUES (1); INSERT INTO table_order_by (id1) VALUES (6); INSERT INTO table_order_by (id1) VALUES (7); INSERT INTO table_order_by (id1) VALUES (4); INSERT INTO table_order_by (id1) VALUES (5); INSERT INTO table_order_by (id1) VALUES (2); INSERT INTO table_order_by (id1) VALUES (3); COMMIT;Data Visualization:
| Ascending order display | Descending order display | ||
SELECT id1 FROM table_order_by ORDER BY id1 ASC; |
SELECT id1 FROM table_order_by ORDER BY id1 DESC; |
||
| 1 | First 2 rows | 7 | First 2 rows |
| 2 | 6 | ||
| 3 | 5 | ||
| 4 | 4 | ||
| 5 | 3 | ||
| 6 | Last 2 rows | 2 | Last 2 rows |
| 7 | 1 | ||
-- (1,2) - (3,4,5,6,7)
SELECT id1
FROM
(
SELECT id1
FROM table_order_by
ORDER BY id1 ASC
) t
WHERE ROWNUM <= 2 -- Number of rows to display
ORDER BY id1 ASC
Query result:1 2
-- (7,6) - (5,4,3,2,1)
SELECT id1
FROM
(
SELECT id1
FROM table_order_by
ORDER BY id1 DESC
) t
WHERE ROWNUM <= 2 -- Number of rows to display
ORDER BY id1 DESC
Query result:7 6
-- (1,2,3,4,5) - (6,7)
SELECT id1
FROM
(
SELECT id1
FROM table_order_by
ORDER BY id1 DESC
) t
WHERE ROWNUM <= 2 -- Number of rows to display
ORDER BY id1 ASC
Query result:6 7
-- (7,6,5,4,3) - (2,1)
SELECT id1
FROM
(
SELECT id1
FROM table_order_by
ORDER BY id1 ASC
) t
WHERE ROWNUM <= 2 -- Number of rows to display
ORDER BY id1 DESC
Query result:2 1
-- (1,2) - (3,4) - (5,6) - (7)
-- current page (3,4)
SELECT id1
FROM
(
SELECT id1
FROM table_order_by
WHERE id1 < 3 -- [1,3,5,7]: First row of the current page
ORDER BY id1 DESC
) t
WHERE ROWNUM <= 2 -- Number of rows to display per page
ORDER BY id1 ASC
Query result:1 2
-- (7,6) - (5,4) - (3,2) - (1)
-- current page (5,4)
SELECT id1
FROM
(
SELECT id1
FROM table_order_by
WHERE id1 > 5 -- [7,5,3,1]: First row of the current page
ORDER BY id1 ASC
) t
WHERE ROWNUM <= 2 -- Number of rows to display per page
ORDER BY id1 DESC
Query result:7 6
-- (1,2) - (3,4) - (5,6) - (7)
-- current page (3,4)
SELECT id1
FROM
(
SELECT id1
FROM table_order_by
WHERE id1 > 4 -- [2,4,6,7]: Last row of the current page
ORDER BY id1 ASC
) t
WHERE ROWNUM <= 2 -- Number of rows to display per page
ORDER BY id1 ASC
Query result:5 6
-- (7,6) - (5,4) - (3,2) - (1)
-- current page (5,4)
SELECT id1
FROM
(
SELECT id1
FROM table_order_by
WHERE id1 < 4 -- [6,4,2,1]: Last row of the current page
ORDER BY id1 DESC
) t
WHERE ROWNUM <= 2 -- Number of rows to display per page
ORDER BY id1 DESC
Query result:3 2
-- (1,2) - (3,4) - (5,6) - (7)
-- page (3,4)
SELECT id1
FROM
(
SELECT
id1
, ROWNUM AS rnum
FROM
(
SELECT id1
FROM table_order_by
ORDER BY id1 ASC
) t1
WHERE ROWNUM <= 4 -- [2,4,6,8]: (Rows per page) * (page number)
)
WHERE rnum >= 3 -- [1,3,5,7]: (Rows per page) * ((page number) - 1) + 1
ORDER BY id1 ASC
Or using ROW_NUMBER function (provides a more modern alternative):
-- (1,2) - (3,4) - (5,6) - (7)
-- page (3,4)
SELECT id1
FROM
(
SELECT
t1.id1
, ROW_NUMBER() OVER (ORDER BY id1 ASC) AS rnum
FROM table_order_by t1
)
WHERE rnum >= 3 -- [1,3,5,7]: (Rows per page) * ((page number) - 1) + 1
AND rnum <= 4 -- [2,4,6,8]: (Rows per page) * (page number)
Query result:3 4
-- (7,6) - (5,4) - (3,2) - (1)
-- page (5,4)
SELECT id1
FROM
(
SELECT
id1
, ROWNUM AS rnum
FROM
(
SELECT id1
FROM table_order_by
ORDER BY id1 DESC
) t1
WHERE ROWNUM <= 4 -- [2,4,6,8]: (Rows per page) * (page number)
)
WHERE rnum >= 3 -- [1,3,5,7]: (Rows per page) * ((page number) - 1) + 1
ORDER BY id1 DESC
Or using ROW_NUMBER() function:
-- (7,6) - (5,4) - (3,2) - (1)
-- page (5,4)
SELECT id1
FROM
(
SELECT
t1.id1
, ROW_NUMBER() OVER (ORDER BY id1 DESC) AS rnum
FROM table_order_by t1
)
WHERE rnum >= 3 -- [1,3,5,7]: (Rows per page) * ((page number) - 1) + 1
AND rnum <= 4 -- [2,4,6,8]: (Rows per page) * (page number)
Query result:5 4