问题描述:
表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);
...
依次类推...请高手指教,可行就给分。
表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);
...
依次类推...请高手指教,可行就给分。
你排序后,加个 TOP 10 就可以了。TOP n 限定返回记录集的行数。
不行的,只有rownum>=1 语句才能执行
oracle 不支持top
Oracle 不支持 Top 吗?不好意思,我没有用过 Oracle 数据库。
from (select row_number() over(order by c) num,a,b,c
from 表A)A
where num > startnum
and num <= endnum
FROM (
SELECT ROWNUM AS RNUM, A,B,C FROM TABLENAME ORDER BY 记录时间
)
WHERE RNUM BETWEEN StartNUM AND (StartNUM + 10)
SELECT A,B,C
FROM (
SELECT ROWNUM AS RNUM, A,B,C FROM TABLENAME ORDER BY 记录时间
)
WHERE RNUM > (I * 10) AND RNUM < (I * 10 + 11)
I为挑取的次数,第一次则为1,第二次则为2,依次类推
from 表A”
里加一个rownum<N ;查询速度就更快了。
谢谢 zqz117(南瓜少爷) 。===============================
在试试
DragonBill(用户中文昵称------静观其变,以静制动)
的方案,
一会儿结贴
rownum是伪列,需要子查询先查出来再操作.
否则,不能用>,只能是从1开始用<
zqz117(南瓜少爷) 80
DragonBill(用户中文昵称------静观其变,以静制动) 15
HelloWorld_001() ( ) 5
/**
*
*程序开始
*
**/
declare
@PageStart int,--记录起始记录的位置
@PageSize int,--每次要查询的数量(你可以固定 为 10)
@Amount int;--查询总条数
begin
set @PageStart=1;
set @PageSize=10;
set @Amount=(select count(*) from t_user )
while(@PageStart<@Amount)
begin
WITH Headers AS
( SELECT id,[name], ROW_NUMBER() OVER (order by times )as RowNumber
FROM t_user
)
SELECT * FROM Headers WHERE RowNumber between @PageStart and @PageStart+@PageSize-1;set @PageStart=@PageStart+@PageSize ;
end
end
/**
*
*程序结束
*
**/
(
select I*20 from table1 desc
) a此类似于分页技术!
ORACLE用过,我说了我哪个时候自己电脑上面没装ORACLE,用得是ms SQL 写的,