我的表有 81,225 行。我正在尝试选择每 285 行:
Select *
From Test A
Where ROWID > 0 AND ROWID <= 81225
AND ROWID % 285 = 285 % 285
此查询按预期返回 285 行,但不是正确的行。需要改变什么?
您使用的模数条件是错误的。 用这个代替:
Select *
From Test A
Where ROWID > 0 AND ROWID <= 81225
AND ROWID % 285 = 0
答案是最简单的,但请注意,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 行等。