Sql 如何按降序选择id刚好大于x的行
我想选择5篇比id为Sql 如何按降序选择id刚好大于x的行,sql,postgresql,pagination,Sql,Postgresql,Pagination,我想选择5篇比id为15的文章更新的文章,只使用SQL按降序排列。此查询有效,但我只想使用一个SELECT。有什么想法吗 SELECT * FROM ( SELECT * FROM posts WHERE id > 15 ORDER BY id ASC LIMIT 5 ) as reverse_ordered ORDER BY id DESC 下一个查询将不起作用,因为我想要ID为20-16的帖子,但这个查询将返回最新的帖子(例如,如果有1
15的文章更新的文章,只使用SQL按降序排列。此查询有效,但我只想使用一个SELECT
。有什么想法吗
SELECT * FROM (
SELECT * FROM posts WHERE id > 15 ORDER BY id ASC LIMIT 5
) as reverse_ordered ORDER BY id DESC
下一个查询将不起作用,因为我想要ID为20-16的帖子,但这个查询将返回最新的帖子(例如,如果有100篇帖子,则返回100-96篇)
IDS的间隙是可能的,上面的数字只是一个例子。 < P>大多数人不会认为这更简单。但是,它不使用子查询:
select unnest( (array_agg(p.id order by p.id asc)::int[])[1:5]) as id
from posts p
where p.id >= 15
order by id desc;
具有子查询的方法应该是性能优越的。
< P>大多数人不会认为这更简单。但是,它不使用子查询:
select unnest( (array_agg(p.id order by p.id asc)::int[])[1:5]) as id
from posts p
where p.id >= 15
order by id desc;
子查询的方法在性能方面应该是优秀的。对于记录,您使用的查询是最佳的,并且比使用id
上的索引支持的任何备选方法都要快得多。它解析为单个索引扫描。第二类的成本可以忽略不计。不确定为什么要选择一个选项,但这可能是一个误解
作为概念证明,在我们进行这场白费力气的追逐时:您要求的是SELECT*
,而不是SELECT id
:
SELECT (unnest((array_agg(p ORDER BY p.id))[1:5])).*
FROM posts p
WHERE p.id > 15
ORDER BY id DESC;
对于记录,您的查询是最佳的,并且在id
上支持索引时比任何备选方案都要快得多。它解析为单个索引扫描。第二类的成本可以忽略不计。不确定为什么要选择一个选项,但这可能是一个误解
作为概念证明,在我们进行这场白费力气的追逐时:您要求的是SELECT*
,而不是SELECT id
:
SELECT (unnest((array_agg(p ORDER BY p.id))[1:5])).*
FROM posts p
WHERE p.id > 15
ORDER BY id DESC;
我认为这是不可能的。为什么希望它是单个查询?简单还是什么?简单和好奇。好吧,让我们等待一些有趣的答案如果你的id没有差距(你说你想要20-16),你可以使用select*从id<21的帖子中按id排序描述限制5
。否则,您需要双击选择。是的,很遗憾,可能存在差距:(我认为这是不可能的。为什么您希望它是一个单一的查询?为了简单还是什么?简单和好奇。好吧,让我们等待一些有趣的答案,如果您的ID没有差距(您说您想要20-16个),你可以使用select*从id<21的帖子中按id排序,限制5
。否则你需要你的双select
。是的,很遗憾,差距是可能的:(到目前为止,这是最好的答案,尽管我必须承认我希望有点不同:)有没有可能在SQL Server
中使用这样的魔法而不使用子查询
到目前为止,这是最好的答案,尽管我必须承认我希望有一点不同:)有没有可能在SQL Server
中使用这样的魔法而不使用子查询