前几行的数据可以用SELECT *
FROM (SELECT col_1, col_2
FROM my_table
ORDER BY col_1)
WHERE ROWNUM < 35假如我有67条记录,后34行的数据应该怎样取得?是在排序的情况下如果不用rownum有其他的方法可以取到吗?
FROM (SELECT col_1, col_2
FROM my_table
ORDER BY col_1)
WHERE ROWNUM < 35假如我有67条记录,后34行的数据应该怎样取得?是在排序的情况下如果不用rownum有其他的方法可以取到吗?
from
(SELECT rownum as account, col_1, col_2
FROM my_table
ORDER BY col_1) a
where account>34
看看行不行
FROM (SELECT col_1, col_2
FROM my_table
ORDER BY col_1)
WHERE ROWNUM < 67
minus
SELECT *
FROM (SELECT col_1, col_2
FROM my_table
ORDER BY col_1)
WHERE ROWNUM < 33
select a.*,row_number() over(order by object_id) as rn from dba_objects a
)where rn>64 and rn<=100
SELECT SYSDATE + LEVEL CONTRACT_ST_DATE FROM DUAL CONNECT BY LEVEL < 68;
select * from ( select CONTRACT_ST_DATE,rownum rn from mg_cont) where rn>34
这个思路不错啊!~ 我没想到,再变通一下:既然是减集上面就不用子查询来排序了
SELECT col_1, col_2
FROM my_table
MINUS
SELECT *
FROM (SELECT col_1, col_2
FROM my_table
ORDER BY col_1)
WHERE ROWNUM <= 34
谢谢,好方法!只想到用序列,没想到用函数,这里的row_number() over得出的应该是一个查询出来的真实数据列,然后再来自查询。学习了! 自己写个SELECT *
FROM (SELECT col_1, col_2, ROW_NUMBER () OVER (ORDER BY col_1) AS rn
FROM my_table)
WHERE rn > 34
这位写的我看不太懂,不会出现先rownum还是先order by的问题吗?
2 SELECT SYSDATE + LEVEL CONTRACT_ST_DATE FROM DUAL CONNECT BY LEVEL < 68;表已创建。
SQL> col conract_st_da format A20
SQL> select * from mg_cont
2 /CONTRACT_ST_DA
--------------
04-2月 -09
05-2月 -09
06-2月 -09
07-2月 -09
08-2月 -09
09-2月 -09
10-2月 -09
11-2月 -09
12-2月 -09
13-2月 -09
14-2月 -09CONTRACT_ST_DA
--------------
15-2月 -09
16-2月 -09
17-2月 -09
18-2月 -09
19-2月 -09
20-2月 -09
21-2月 -09
22-2月 -09
23-2月 -09
24-2月 -09
25-2月 -09CONTRACT_ST_DA
--------------
26-2月 -09
27-2月 -09
28-2月 -09
01-3月 -09
02-3月 -09
03-3月 -09
04-3月 -09
05-3月 -09
06-3月 -09
07-3月 -09
08-3月 -09CONTRACT_ST_DA
--------------
09-3月 -09
10-3月 -09
11-3月 -09
12-3月 -09
13-3月 -09
14-3月 -09
15-3月 -09
16-3月 -09
17-3月 -09
18-3月 -09
19-3月 -09CONTRACT_ST_DA
--------------
20-3月 -09
21-3月 -09
22-3月 -09
23-3月 -09
24-3月 -09
25-3月 -09
26-3月 -09
27-3月 -09
28-3月 -09
29-3月 -09
30-3月 -09CONTRACT_ST_DA
--------------
31-3月 -09
01-4月 -09
02-4月 -09
03-4月 -09
04-4月 -09
05-4月 -09
06-4月 -09
07-4月 -09
08-4月 -09
09-4月 -09
10-4月 -09CONTRACT_ST_DA
--------------
11-4月 -09已选择67行。SQL> select * from ( select CONTRACT_ST_DATE,rownum rn
RACT_ST_DATE desc) order by rn
2 /CONTRACT_ST_DA RN
-------------- ----------
04-2月 -09 1
05-2月 -09 2
06-2月 -09 3
07-2月 -09 4
08-2月 -09 5
09-2月 -09 6
10-2月 -09 7
11-2月 -09 8
12-2月 -09 9
13-2月 -09 10
14-2月 -09 11CONTRACT_ST_DA RN
-------------- ----------
15-2月 -09 12
16-2月 -09 13
17-2月 -09 14
18-2月 -09 15
19-2月 -09 16
20-2月 -09 17
21-2月 -09 18
22-2月 -09 19
23-2月 -09 20
24-2月 -09 21
25-2月 -09 22CONTRACT_ST_DA RN
-------------- ----------
26-2月 -09 23
27-2月 -09 24
28-2月 -09 25
01-3月 -09 26
02-3月 -09 27
03-3月 -09 28
04-3月 -09 29
05-3月 -09 30
06-3月 -09 31
07-3月 -09 32
08-3月 -09 33CONTRACT_ST_DA RN
-------------- ----------
09-3月 -09 34已选择34行。SQL>