Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在sqlite中使用行数_Sqlite_Android Sqlite_Row Number - Fatal编程技术网

如何在sqlite中使用行数

如何在sqlite中使用行数,sqlite,android-sqlite,row-number,Sqlite,Android Sqlite,Row Number,下面是我的问题 select * from data where value = "yes"; NoId || value 1 || yes 2 || yes 3 || yes 4 || yes 5 || yes 我的id是自动递增的,下面是给定查询的结果 id || value 1 || yes 3 || yes 4 || yes 6 || yes 9 || yes 如何在sqlite中使用行号?这样我就

下面是我的问题

select * from data where value = "yes";
NoId || value 
1    ||   yes
2    ||   yes
3    ||   yes
4    ||   yes
5    ||   yes
我的id是自动递增的,下面是给定查询的结果

id || value 
1  ||   yes
3  ||   yes
4  ||   yes
6  ||   yes
9  ||   yes
如何在sqlite中使用行号?这样我就可以得到下面给出的结果

select * from data where value = "yes";
NoId || value 
1    ||   yes
2    ||   yes
3    ||   yes
4    ||   yes
5    ||   yes
行号为NoId。

尝试此查询

select id, value, (select count(*) from tbl b  where a.id >= b.id) as cnt
from tbl a

我用提琴般的回答做了一些修补,结果完全符合预期

select id, value , 
       (select count(*) from data b where a.id >= b.id and b.value='yes') as cnt 
from data a where  a.value='yes';

result
1|yes|1
3|yes|2
4|yes|3
6|yes|4
9|yes|5
将添加对窗口功能的支持

2018-09-15(3.25.0)

  • 添加对窗口功能的支持

  • :

    窗口函数是一种特殊的SQL函数,其中输入值取自SELECT语句结果集中一行或多行的“窗口”

    SQLite支持以下11个内置窗口函数:

    行号()

    当前分区内的行数。行从1开始按窗口定义中order by子句定义的顺序编号,或按任意顺序编号

    因此,您的查询可以重写为:

    select *, ROW_NUMBER() OVER(ORDER BY Id) AS NoId
    from data 
    where value = "yes";
    

    更新:sqlite3 3.25版现在支持窗口功能,包括:

    行号()超过(按id排序)


    id是自动递增还是PK列?您是否尝试过
    选择_ROWID_uu
    ?@Scotch:它不是完全重复的,因为OP似乎询问的是完整表扫描的ROWID,而不是特定查询的ROWID。@AlixAxel所以查询整个表?@Scotch:数据似乎表明,是的。我知道用链接到的答案也可以克服这一点,但这可能是不必要的,而且速度较慢(取决于
    id
    的列定义)。请检查小提琴。它仅使用sqllite。。您可以发布您正在使用的查询吗..这只意味着,SQLite中没有这样的功能。顺便问一下,我想知道这是不是O(n^2)…是的,这是n^2-ish。别这样:)太好了。它在聚合函数上也能很好地工作。+1我要感谢您提供了这些关键信息。在过去的一天里,我一直在绞尽脑汁,试图弄明白为什么在使用java JDBC驱动程序使用row_number函数时出现语法错误。在看到你的评论并意识到我正在运行3.20.1版之前,我找不到任何关于它的信息。升级版本后,我现在可以使用窗口功能!!再次感谢。