Mat*_*ton 34
这只是我写过的最离奇的查询,但我很确定它从表中获得了"最后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上不起作用.
小智 29
假设你有一个关于id的索引,这将是闪电般的:
SELECT * FROM [MyTable] WHERE [id] > (SELECT MAX([id]) - 5 FROM [MyTable])
Red*_*ter 10
您的问题的措辞使得听起来像您认为您必须在表格中实际使用数据,以便按照您想要的顺序将其恢复.如果是这样,则不是这种情况,为此目的存在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
小智 10
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
它不会轻易订购.
select * from table limit 5 offset (select count(*) from table) - 5;
| 归档时间: | 
 | 
| 查看次数: | 180744 次 | 
| 最近记录: |