我正在寻找一种在PostgreSQL中跳过行的方法。
我可以使用两种方法来做到这一点:
SELECT * FROM table WHERE id % 5 = 0
但是,我必须获取连续的行才能正确地跳过。例如,如果我获取row(with ids)0,3,5,它不会跳过5行中的4行,而是导致(ids)0和5。
或者跳过SQL以外的部分:
$count = 0;
while($row = progres_fetch_row($result))
if ($count++ % 5 == 0)
// do something
从SQL数据库中获取每第n行的最快方法是什么?
4条答案
按热度按时间ffscu2ro1#
如果你使用PostgreSQL,你可以使用
row_number()
:t1rydlwq2#
如果n足够大(比如1000),你可以考虑使用WITH RECURSIVE查询:
bvn4nwqk3#
@Guillaume Poussel可以很好地跳过第n行,但是如果我们想删除0到x范围内的n个元素,它不会包括第0行。
所以,如果我们只想包含从0开始的每第5个元素,这是解决方案:
原始索引:
上述语句后的索引:
iovurdzv4#
这里有一个通用的解决方案,可能会很慢,以防您无法访问排名函数,如
row_number()
。在MySQL中,你可以这样写:如果你想添加额外的 predicate ,只需要确保将它们添加到外部和内部查询中:
备注:
ORDER BY
子句定义