当前位置:  开发笔记 > 数据库 > 正文

如何在不排序的情况下选择表格中的最后5行?

如何解决《如何在不排序的情况下选择表格中的最后5行?》经验,为你挑选了4个好方法。

我想从SQL Server中的表中选择最后5条记录,而不按升序或降序排列表.



1> Matt Hamilto..:

这只是我写过的最离奇的查询,但我很确定它从表中获得了"最后5行"而没有订购:

select * 
from issues
where issueid not in (
    select top (
        (select count(*) from issues) - 5
    ) issueid
    from issues
)

请注意,这利用了SQL Server 2005将值传递给"top"子句的能力 - 它在SQL Server 2000上不起作用.


没有订单,这是行不通的.期.当一个查询捎带另一个查询的结果并且结果可能完全不同时,您可能会遇到这种情况.

2> 小智..:

假设你有一个关于id的索引,这将是闪电般的:

SELECT * FROM [MyTable] WHERE [id] > (SELECT MAX([id]) - 5 FROM [MyTable])


只有在您没有删除任何记录的情况下,这才是安全的.即.如果您的最大ID = 100,但是您删除了记录99,那么您最终将只有4条记录,而不是5条记录.

3> RedFilter..:

您的问题的措辞使得听起来像您认为您必须在表格中实际使用数据,以便按照您想要的顺序将其恢复.如果是这样,则不是这种情况,为此目的存在ORDER BY子句.使用ORDER BY时,存储记录的物理顺序保持不变.记录在返回之前在内存(或临时磁盘空间)中排序.

请注意,如果不使用ORDER BY子句,则无法保证返回记录的顺序.因此,虽然这里的任何建议都可行,但没有理由认为它们会继续工作,也无法证明它们适用于当前数据库的所有情况.这是设计 - 我假设它是为数据库引擎提供自由的记录,以便在没有指定显式顺序的情况下获得最佳性能.

假设您希望按字段名称升序排序的最后5条记录,您可以执行类似这样的操作,这应该适用于SQL 2000或2005:

select Name 
from (
    select top 5 Name 
    from MyTable 
    order by Name desc
) a 
order by Name asc



4> 小智..:

    你需要计算表内的行数(比如我们有12行)

    然后从它们中减去5行(我们现在在7中)

    select*where index_column> 7

    select * from users
    where user_id > 
    ( (select COUNT(*) from users) - 5)
    

    你可以订购它们ASC或DESC

    但是在使用这段代码时

    select TOP 5 from users order by user_id DESC
    

    它不会轻易订购.

推荐阅读
殉情放开那只小兔子
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有