我想从SQL Server中的表中选择最后5条记录,而不按升序或降序排列表.
这只是我写过的最离奇的查询,但我很确定它从表中获得了"最后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上不起作用.
假设你有一个关于id的索引,这将是闪电般的:
SELECT * FROM [MyTable] WHERE [id] > (SELECT MAX([id]) - 5 FROM [MyTable])
您的问题的措辞使得听起来像您认为您必须在表格中实际使用数据,以便按照您想要的顺序将其恢复.如果是这样,则不是这种情况,为此目的存在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
你需要计算表内的行数(比如我们有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
它不会轻易订购.