读书人

100分一个sql语句(oracle数据库)

发布时间: 2012-02-03 22:02:47 作者: rapoo

100分求助一个sql语句(oracle数据库)
问题描述:
表A有n(n> 10000)条记录,现在想每次从A表中取出10条记录(不足10的全部取出),
要求每次查询从上次查询的最后一条开始取10条.记录集按时间排序。

(再次说明:oracle数据库)

比如:

a b c 记录时间
-- --- --- -------------------
7 0 84 2007-04-28 10:00:00
7 0 85 2007-04-28 10:00:00
7 0 86 2007-04-28 10:00:00
7 0 87 2007-04-28 10:00:00
7 0 88 2007-04-28 10:00:00
7 0 89 2007-04-28 10:00:00
7 0 94 2007-04-28 10:00:00
7 0 95 2007-04-28 10:00:00
7 0 96 2007-04-28 10:00:00
7 0 103 2007-04-28 10:00:00

7 0 104 2007-04-28 10:00:00
7 0 105 2007-04-28 10:00:00
7 0 106 2007-04-28 10:00:00


7 0 107 2007-04-28 10:00:00
7 0 108 2007-04-28 10:00:00
7 0 115 2007-04-28 10:00:00
7 0 116 2007-04-28 10:00:00
7 0 117 2007-04-28 10:00:00
7 0 118 2007-04-28 10:00:00
7 0 119 2007-04-28 10:00:00
7 0 120 2007-04-28 10:00:00
7 0 121 2007-04-28 10:00:00

7 0 122 2007-04-28 10:00:00
7 0 123 2007-04-28 10:00:00
7 0 124 2007-04-28 10:00:00
7 0 125 2007-04-28 10:00:00
7 0 126 2007-04-28 10:00:00
7 0 127 2007-04-28 10:00:00
7 0 128 2007-04-28 10:00:00


7 0 129 2007-04-28 10:00:00
7 0 130 2007-04-28 10:00:00
7 0 131 2007-04-28 10:00:00
7 0 132 2007-04-28 10:00:00
......


第一次取出1~10条 (上面字段c 的值从84到103);
第二次取出11~20条 (上面字段c的值从104到121);
...
依次类推...

请高手指教,可行就给分。

[解决办法]
select A.a,A.b,A.c
from (select row_number() over(order by c) num,a,b,c
from 表A)A
where num > startnum
and num <= endnum
[解决办法]
SELECT A,B,C
FROM (
SELECT ROWNUM AS RNUM, A,B,C FROM TABLENAME ORDER BY 记录时间
)
WHERE RNUM BETWEEN StartNUM AND (StartNUM + 10)
[解决办法]
后面回复的都是正确的
rownum是伪列,需要子查询先查出来再操作.
否则,不能用> ,只能是从1开始用 <

读书人网 >oracle

热点推荐