如何选择每第n行?

问题描述 投票:0回答:2

我的表有 81,225 行。我正在尝试选择每 285 行:

Select *
From Test A
Where ROWID  > 0 AND ROWID <= 81225
AND ROWID % 285 = 285 % 285

此查询按预期返回 285 行,但不是正确的行。需要改变什么?

sql sqlite modulo
2个回答
8
投票

您使用的模数条件是错误的。 用这个代替:

Select *
From Test A
Where ROWID  > 0 AND ROWID <= 81225
AND ROWID % 285 = 0

0
投票
Tim Biegeleisen 的

答案是最简单的,但请注意,ROWID 仅在符合您想要的排序顺序时才有效。 也就是说,如果行最初以正确的顺序插入,则不会删除任何行,也不会执行 VACUUM。 (请参阅“VACUUM 命令可能会更改 ROWID ...”) 如果您想要按某个特定列排序后的每n行,有一种更复杂的方法,如

这个答案

中所述。 从 3.25 版本开始它应该可以与 SQLite 一起使用 在您的示例中,名为“Test A”的表看起来像这样。 (将“Your_Sort_Column”替换为您的相关列名称)

SELECT * FROM ( SELECT ROW_NUMBER() OVER (ORDER BY Your_Sort_Column) AS rownumber, * FROM "Test A" ) WHERE rownumber % 285 = 0

这当然会跳过第一行并给出第 285、570、855 等行。

如果您想获取第一行,然后每第 285 行,请将 0 替换为 1。

rownumber % 285 = 1

将为您提供第 1、286、571 行等。

    

© www.soinside.com 2019 - 2024. All rights reserved.