SQLite3(或通用SQL)检索查询结果的第n行

时间:2010-08-05 22:13:20

标签: sql mysql sqlite

关于SQLite3的快速提问(也可能是一般的SQLite)

如何检索查询结果的第n行?

row_id(或任何索引)对我的情况不起作用,因为表包含带数字的列。根据一些数据,查询需要未排序的数据或按asc / desc标准排序。

但我可能需要快速检索,比如第2行和第2行。 5个结果。

所以除了现在用计数器实现sqlite3_step()== SQLITE_ROW之外,我不知道如何继续这个。

由于性能问题,我不太喜欢这个解决方案。所以,如果有人可以提出一个非常感激的提示。

此致 大卫

3 个答案:

答案 0 :(得分:22)

LIMIT 1OFFSET <n>添加到查询中 示例SELECT * FROM users LIMIT 1 OFFSET 5132;

答案 1 :(得分:0)

一般方法是,如果您只想要m行的第n行,请使用适当的where条件来获取那个行。

如果您需要连续但不能,因为没有where条件可以帮助您,那么您的数据库存在严重的设计问题。它失败了first normal form,它指出“行没有从上到下排序。”

答案 2 :(得分:0)

但是我可能需要快速检索结果的第2行和第5行。

在需要非连续行的情况下,可以使用ROW_NUMBER()

WITH cte AS (
  SELECT *, ROW_NUMBER() OVER() AS rn --OVER(ORDER BY ...) --if specific order is required
  FROM t
)
SELECT c 
FROM cte
WHERE rn IN (2,5);  -- row nums

db<>fiddle demo