Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/87.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 如何按降序选择id刚好大于x的行_Sql_Postgresql_Pagination - Fatal编程技术网

Sql 如何按降序选择id刚好大于x的行

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

我想选择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的帖子,但这个查询将返回最新的帖子(例如,如果有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
中使用这样的魔法而不使用
子查询