如何在sqlite中使用ROW_NUMBER

Abo*_*Kdz 27 sqlite row-number android-sqlite

这是我在下面给出的查询.

select * from data where value = "yes";
Run Code Online (Sandbox Code Playgroud)

我的id是自动增量,下面是给定查询的结果.

id || value 
1  ||   yes
3  ||   yes
4  ||   yes
6  ||   yes
9  ||   yes
Run Code Online (Sandbox Code Playgroud)

如何在sqlite中使用ROW_NUMBER?这样我就可以得到下面给出的结果.

NoId || value 
1    ||   yes
2    ||   yes
3    ||   yes
4    ||   yes
5    ||   yes
Run Code Online (Sandbox Code Playgroud)

ROW_NUMBER作为NoId.

Meh*_*zad 22

试试这个查询

select id, value, (select count(*) from tbl b  where a.id >= b.id) as cnt
from tbl a
Run Code Online (Sandbox Code Playgroud)

小提琴

| id | value | cnt |
--------------------
|  1 |   yes |   1 |
|  3 |   yes |   2 |
|  4 |   yes |   3 |
|  6 |   yes |   4 |
|  9 |   yes |   5 |
Run Code Online (Sandbox Code Playgroud)

  • 这是一个更好的解决方案:http://stackoverflow.com/a/19199219/1037294 (3认同)
  • 没有在sqlite中工作的cnt仍然是1,3,4,6,9 (2认同)

Luk*_*zda 13

SQLite版本3.25.0将添加对窗口函数的支持

2018-09-00(3.25.0)

  1. 添加对窗口函数的支持

窗口功能:

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

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

ROW_NUMBER()

当前分区中的行数.行按照窗口定义中ORDER BY子句定义的顺序从1开始编号,否则按任意顺序编号.

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

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

db-fiddle.com演示