设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

返回列表 发新帖
楼主: xingzhihao
打印 上一主题 下一主题

[Access本身] 如何取后50条记录?

[复制链接]
11#
 楼主| 发表于 2012-12-18 13:42:43 | 只看该作者
朱总出手谁与争锋?感谢朱总感谢龙!
12#
发表于 2012-12-18 16:37:38 | 只看该作者
NOT IN 速度应该比较慢,二楼的方法可能更优一些。
13#
发表于 2012-12-18 16:43:41 | 只看该作者
本帖最后由 todaynew 于 2012-12-18 17:05 编辑
鑨蘢瀧爖壟 发表于 2012-12-18 10:11
select * from [表名] where not [主键] in (select top 9950 * from [表名] order by [主键])  这样可以吗 ...

既然已经找到9950了,干嘛还要not in?大于9950不就完事了。

select * from tbname where dcount("*","tbname","ID<=" & ID)>9950

实际上9950不是必要的,可以写为:

select * from tbname where dcount("*","tbname","ID<=" & ID)>(dcount("*","tbname")-50)

不过域函数、子查询、in运算速度都比较慢。还是先逆序top 50 ,再顺序一下为好。

点击这里给我发消息

14#
发表于 2012-12-18 20:25:14 | 只看该作者
比较热闹呀,我也来一个,如果不充许倒序,是否这个速度快一点:
  1. SELECT 表1.*
  2. FROM 表1 LEFT JOIN (SELECT TOP 950 表1.自动编号 FROM 表1) AS 子查询 ON 表1.自动编号 = 子查询.自动编号
  3. WHERE (((子查询.自动编号) Is Null));
复制代码

点击这里给我发消息

15#
发表于 2012-12-18 23:07:56 | 只看该作者
不会你们所想的ID都是自动编号吧?而还是中间没有删除ID的?

点评

支持  发表于 2012-12-20 12:30
16#
发表于 2012-12-19 08:13:31 | 只看该作者
本帖最后由 wufeng980114 于 2012-12-19 08:25 编辑

哈哈,集思广益啊,很多曲线救国的思路啊。如zhuyiwen所述,如果中间的ID不连续怎么办?我一般是表中设置两个ID,一个给用户看的,一个自己编程用,(当然也可以根据情况只使用一个ID,这个ID不是自动编号的),每次表更新(如:删除记录)时,就把自己的ID重新排序,保证ID不间断,这样可能会比较麻烦,影响速度,但也能解决问题。
"SELECT * FROM  yourData  where 自己的id > 950"
17#
发表于 2012-12-19 11:20:01 | 只看该作者
本帖最后由 todaynew 于 2012-12-19 11:22 编辑
zhuyiwen 发表于 2012-12-18 23:07
不会你们所想的ID都是自动编号吧?而还是中间没有删除ID的?

编号是什么数据类型,是否存在断号,都不影响。只要id是增长的,而不是随机的就行。
18#
发表于 2012-12-19 11:59:21 | 只看该作者
比较同意老汉的观点,要是记录不是1000条就不好办。
19#
发表于 2012-12-19 23:28:53 | 只看该作者
哎,这个问题没什么意义. 感觉Access子查询很慢的. 不知这个是否在网络多用户更新没有呢. 如果多用户更新,一切都毫无意义的. 只不过1千条记录嘛,要分开它干嘛呢.

点击这里给我发消息

20#
发表于 2012-12-20 11:53:00 | 只看该作者
老汉的方法挺有意思
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|站长邮箱|小黑屋|手机版|Office中国/Access中国 ( 粤ICP备10043721号-1 )  

GMT+8, 2024-5-16 06:41 , Processed in 0.105317 second(s), 32 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表