SQL中如何查询出最后几条记录

While_Devil 2012-11-27 03:48:36
这里有一张未知记录且数据容量很大的表,
如何能不用top和order by方法的情况下查询出最后N条记录来。
...全文
4012 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
發糞塗牆 2012-11-27
  • 打赏
  • 举报
回复
引用 18 楼 zgz0929 的回复:
引用 12 楼 DBA_Huangzj 的回复: 引用 11 楼 zgz0929 的回复: 引用 6 楼 TravyLee 的回复: 如果没自增ID的话 使用order by +top的方法会开小会很大 那么有自增ID,不用order by 和top 怎么弄呢?比如你的id从1到1000万,然后你要找最后10条,直接select * from tb where id betwee……
如果创建了索引,可以从: SELECT rowcnt FROM sys.sysindexes WHERE OBJECT_ID=OBJECT_ID('表名') AND indid=1为聚集索引,>1为非聚集索引,具体要看你创建什么索引 找到某个表最大的行数,
我腫了 2012-11-27
  • 打赏
  • 举报
回复
有沒有日期?能不能根據日期排序?
  • 打赏
  • 举报
回复

价格ID自增字段
alter table tablename
add ID int identity(1,1)
go

DBCC CHECKIDENT(表的名字)
可以查看到该表当前标识列值(也就是说最后一行数据的ID值)

然后你再
select * from tb where id between @a and 最大值

如果给这个ID自增字段建有索引  那么速度很快了
While_Devil 2012-11-27
  • 打赏
  • 举报
回复
引用 12 楼 DBA_Huangzj 的回复:
引用 11 楼 zgz0929 的回复: 引用 6 楼 TravyLee 的回复: 如果没自增ID的话 使用order by +top的方法会开小会很大 那么有自增ID,不用order by 和top 怎么弄呢?比如你的id从1到1000万,然后你要找最后10条,直接select * from tb where id between 9999990 and 10000000即可
首先 在未知这表有多少记录的情况下呢。
While_Devil 2012-11-27
  • 打赏
  • 举报
回复
引用 14 楼 hjywyj 的回复:
有自增id也得用top,orderby吧 假设有100条数据,id:1-100 删了第92,98条数据,要找最后十条between 90 and 100是找不到的
前提是在不用的情况下哦,亲!
發糞塗牆 2012-11-27
  • 打赏
  • 举报
回复
引用 14 楼 hjywyj 的回复:
有自增id也得用top,orderby吧 假设有100条数据,id:1-100 删了第92,98条数据,要找最后十条between 90 and 100是找不到的
要不要top要看需求。不一定非要用
發糞塗牆 2012-11-27
  • 打赏
  • 举报
回复
引用 13 楼 zgz0929 的回复:
引用 10 楼 DBA_Huangzj 的回复: 加上了,如果有索引,直接可以定位,速度快得很。除非你大批量查询 eg一个呗!
看12楼
  • 打赏
  • 举报
回复
有自增id也得用top,orderby吧 假设有100条数据,id:1-100 删了第92,98条数据,要找最后十条between 90 and 100是找不到的
While_Devil 2012-11-27
  • 打赏
  • 举报
回复
引用 10 楼 DBA_Huangzj 的回复:
加上了,如果有索引,直接可以定位,速度快得很。除非你大批量查询
eg一个呗!
發糞塗牆 2012-11-27
  • 打赏
  • 举报
回复
引用 11 楼 zgz0929 的回复:
引用 6 楼 TravyLee 的回复: 如果没自增ID的话 使用order by +top的方法会开小会很大 那么有自增ID,不用order by 和top 怎么弄呢?
比如你的id从1到1000万,然后你要找最后10条,直接select * from tb where id between 9999990 and 10000000即可
While_Devil 2012-11-27
  • 打赏
  • 举报
回复
引用 6 楼 TravyLee 的回复:
如果没自增ID的话 使用order by +top的方法会开小会很大
那么有自增ID,不用order by 和top 怎么弄呢?
發糞塗牆 2012-11-27
  • 打赏
  • 举报
回复
加上了,如果有索引,直接可以定位,速度快得很。除非你大批量查询
While_Devil 2012-11-27
  • 打赏
  • 举报
回复
引用 5 楼 DBA_Huangzj 的回复:
引用 4 楼 zgz0929 的回复: 引用 1 楼 qianjin036a 的回复: 没有自增ID么? 用的是GUIDGUID本来没啥顺序可言,所以如果你要排序,恐怕要搞个自增ID列。
那么加上自增ID列后怎么弄呢
tongchengchaolr 2012-11-27
  • 打赏
  • 举报
回复
有没有关于时间或者是排序的字段了
  • 打赏
  • 举报
回复
建议你给表加一个ID自增字段 这样的话虽然现在加这个字段会花点开销 但是以后处理会很方便了
  • 打赏
  • 举报
回复
如果没自增ID的话 使用order by +top的方法会开小会很大
發糞塗牆 2012-11-27
  • 打赏
  • 举报
回复
引用 4 楼 zgz0929 的回复:
引用 1 楼 qianjin036a 的回复: 没有自增ID么? 用的是GUID
GUID本来没啥顺序可言,所以如果你要排序,恐怕要搞个自增ID列。
While_Devil 2012-11-27
  • 打赏
  • 举报
回复
引用 1 楼 qianjin036a 的回复:
没有自增ID么?
用的是GUID
-晴天 2012-11-27
  • 打赏
  • 举报
回复
如果没有自增列,且没有别的聚集索引,则可以用不带排序的select 语句获得最后加入的记录,如果有聚集索引,则无法直接知道最后添加的行是哪几行,因为,SQL里"行的顺序"只有在"以什么排序"时才有意义. 只有一个办法,用Log explorer之类的软件去查询操作记录,看哪几行是最后添加进去的.
發糞塗牆 2012-11-27
  • 打赏
  • 举报
回复
创建一个有顺序的聚集索引列,然后......
加载更多回复(1)

22,210

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧