SQLite,按行索引选择一行,而不是id

4m1*_*m1r 2 sqlite

我有一个 100K 行的 sqlite 数据库。但是,随着时间的推移,其中一些行已被删除,因此主键不再是连续的。现在,它们的顺序是 3,5,6,9,900,n...

问题是我想将这些放在 UITableView 中,cellForIndexRowAtIndexPath 为 0,1,2,3 等。有没有办法我可以做类似的事情

SELECT * FROM table WHERE id =  0;
Run Code Online (Sandbox Code Playgroud)

但我想选择 0 处的索引位置,而不是 id = 0;

SELECT * FROM table where table._table_index = 0; //don't try this at home
Run Code Online (Sandbox Code Playgroud)

谢谢!

Ben*_*mps 5

您可以使用 LIMIT 和 OFFSET 关键字在结果集中的特定位置选择单个记录。

EX:此语句将在索引位置 10 处返回一行

SELECT * FROM Table LIMIT 1 OFFSET 10; 
Run Code Online (Sandbox Code Playgroud)

注意: 自从回答问题以来,SQLite 添加了窗口函数。使用窗口函数,可以在查询中返回记录的行号。

SELECT 
row_number() OVER (ORDER BY FirstName, LastName) AS rowNum,
FirstName, 
LastName,
FROM People;
Run Code Online (Sandbox Code Playgroud)

在 sqlite 3.25 版本中添加了窗口函数

  • System.Data.Sqlite - 1.0.110.0 或更新版本
  • Microsoft.Data.Sqlite - 2.2.2 或更新版本