我有一张表(文章),它有 10 条记录,我想得到最后四条记录(第 6、第 7、第 8、第 9 条)而没有第 10 条。查询也可能适用于超过 10 条记录,以获取最后四行而不是绝对最后一行。提前致谢!
问问题
1959 次
1 回答
6
在 SQL 中,表本质上是无序的。因此,让我假设您有一个指定排序的列——一个 id 列、一个日期时间或类似的东西。
以下是您想要的:
select top 4 *
from (select top 5 *
from Article a
order by id desc
) a
order by id asc
如果由于某种原因您没有 id,您可以使用以下查询来把握机会:
select a.*
from (select a.*, row_number() over (order by (select NULL)) as seqnum,
count(*) over () as totcnt
from Article a
) a
where seqnum between totcnt - 5 and totcnt - 1
我想强调的是,这并不能保证有效。根据我的经验,我已经看到 seqnum 的定义按顺序为行分配序号。但这不能保证工作,并且可能无法在多线程环境中工作。但是,您可能会很幸运(特别是如果您的行适合一个数据页)。
顺便说一句,您可以对真实列使用相同的想法:
select a.*
from (select a.*, row_number() over (order by id) as seqnum,
count(*) over () as totcnt
from Article a
) a
where seqnum between totcnt - 5 and totcnt - 1
于 2013-02-03T17:49:44.253 回答