Sqlite在每个SELECT请求中获得ROW NUMBER和COUNT条记录

时间:2015-04-28 16:15:05

标签: sql sqlite

我在网格应用程序上使用Sqlite3非常类似于post here.

网格需要显示的行和找到的总行数,用于分页。

在Oracle上我使用以下语句从100到500获取行 - 字段Id,Name,Phone其中Deleted = false:

SELECT * FROM (SELECT ROW_NUMBER() 
              OVER (ORDER BY ID)  AS RN, 
              COUNT(*) OVER (ORDER BY (SELECT NULL) AS CNT) 
              Id, Name, Phone FROM MyTable WHERE Deleted='F') 
T WHERE RN > 100 AND RN < 500;

在MySQl上,我通常使用excellet SELECT SQL_CALC_FOUND_ROWS,后跟SELECT FOUND_ROWS()来电。

所以我的问题是:

a)上面的Oracle或MySQL选项是否有相应的Sqlite3? b)如何在不发出2个选择的情况下在Sqlite3上完成该操作(一个用于查询,另一个用于计数)?

发布的问题here并没有解决我的问题,因为它没有返回记录数,只返回表中的页面。

非常感谢帮助...

1 个答案:

答案 0 :(得分:0)

在最新版本的SQLite(3.25.0和更高版本)中,支持window functions。因此,您可以按以下方式重写查询:

SELECT * FROM (SELECT ROW_NUMBER() OVER (ORDER BY ID) AS RN, 
               COUNT() OVER () AS CNT,
               Id, Name, Phone FROM MyTable WHERE Deleted='F') 
T WHERE RN > 100 AND RN < 500;