关于分段取数据的问题,如下:
字段:FID FName 按FName排序:FID FName
1 B 2 A
2 A 6 A
3 B 9 A
4 C 10 A
5 B 1 B
6 A 3 B
7 B 5 B
8 C 7 B
9 A 4 C
10 A 8 C
分段取数据,每次3条记录:
第一次:
FID FName
2 A
6 A
9 A
第二次:
10 A
1 B
3 B
第三次:
5 B
7 B
4 C
第四次:
8 C
请问各位如何实现?
字段:FID FName 按FName排序:FID FName
1 B 2 A
2 A 6 A
3 B 9 A
4 C 10 A
5 B 1 B
6 A 3 B
7 B 5 B
8 C 7 B
9 A 4 C
10 A 8 C
分段取数据,每次3条记录:
第一次:
FID FName
2 A
6 A
9 A
第二次:
10 A
1 B
3 B
第三次:
5 B
7 B
4 C
第四次:
8 C
请问各位如何实现?
解决方案 »
- Delphi中TServerSocket和TClientSocket通信,流或二进制的发送与接收问题
- 请大家帮忙看下,关于idtcpclent和idtcpserver的简单问题
- FastRepor里怎样做才能折行?
- 怎么我的程序在没有安装dephi的机器上无法运行啊
- 为什么我用谁的用户名和密码登陆都是显示数据库中第一个记录的信息??
- 谁有荣誉勋章:突出重围的序列号 下面的都不对!
- 谁又能通俗说一下paradox表中的键,主键和索引的区别啊,小弟我先谢过各位了
- 急,有关checklistbox的小问题,在线等
- 急急,在线等待,高分,不够再加把数据库中的数据导到Excel中
- dbgrid彩色显示
- help~~!
- 散分,找到一份新工作,要做leader了!!!!
如何设置数据集的属性?
to firetoucher(风焱) :
select top 3 * from table,没有解决排序的问题,更不能解决分段的问题。
2 分段的问题你可以直接设置delphi中数据集的属性就可以了
非常感谢你回答我的问题。请问如何设置数据集的属性?
和
property BlockReadSize: Integer;
ads.CommandText := ' select top 3 * from table order by FName'
第二次?
第三次?
to firetoucher(风焱) :
非常感谢你再次回答我的问题。但是ads.BlockReadSize := 3只能执行在ads.Open之后,并没有提高查询速度,也没有实现第二次,三次是否我的用法有误?
ads.CommandText := ' select * from table order by FName';
ads.Open;
ads..BlockReadSize := 3;
结果一次查出了所有记录,并没有出现设想的效果。
第一次
select * from
(select * from Table order by FName)
where rownum<=3
minus
select * from
(select * from Table order by FName)
where rownum<=0
第二次
select * from
(select * from Table order by FName)
where rownum<=6
minus
select * from
(select * from Table order by FName)
where rownum<=3
依此类推
如果再取下一个100的话可以用:
ClientDataSet1.GetNextPacket;
1 如果你是取所有的数据而只是显示一部分,你可以用循环和book
2 如果你只是分开取得话,假定为第n次,可以用sql
select top 3 from (select top 3n * from table order by FName) order by FName disc
begin
FetchOnDemand:=False;//如果不对的话,就改为True;
PacketRecords:=3;
end;
每次提取下一段数据时,调用ClientDataSet1.GetNextPacket;
SELECT TOP 3 *
FROM table
WHERE a >(SELECT MAX(a)
FROM table where a in
(select top
6 a from table))
不知数据大的时候会不会很慢。
当n(3,6....360000)足够大的时候就很慢了。
MIDAS是怎么搞定的,临时表么?
李维不是说一次最好1000条么,是不是n会小些,数据再多是不是可以分表存放,比如2000年6月的数据建个表名叫Year2000_6之类。
二、我觉得应该加一个自增字段,以FNAME排序的,这样你就可以写成(例自增字段是idd))
select @idd = min(idd) from table
while @idd <> null
begin
select top 3 *
from table
where idd >= @idd
select @idd = min(idd) from table where idd > @idd + 3
end
upup
select * from
(select * from Table order by FName)
where rownum<=3
第二次
select * from
(select * from Table order by FName)
where rownum<=6
minus
select * from
(select * from Table order by FName)
where rownum<=3
第三次
select * from
(select * from Table order by FName)
where rownum<=9
minus
select * from
(select * from Table order by FName)
where rownum<=6
存储过程和函数一样,你一个传参数进去呀
根据参数动态查询SELECT IDENTITY(int, 1,1) as ID_num,*//如果yourtablename有一个自增字段,你就不能选这个字段
into #temp
FROM yourtablename
select * from #temp where id_num>@p1 and id_num<@p2//
B方案:
1.select top 10000 * from goods where ip not in (select top 10000 ip from goods)