Как использовать ROW_NUMBER в sqlite

Вот мой запрос, приведенный ниже.

select * from data where value = "yes";

Мой идентификатор является автоматическим приращением и ниже находится результат заданного запроса.

id || value 
1  ||   yes
3  ||   yes
4  ||   yes
6  ||   yes
9  ||   yes

Как использовать ROW_NUMBER в sqlite? Так что я могу получить результат, который приведен ниже.

NoId || value 
1    ||   yes
2    ||   yes
3    ||   yes
4    ||   yes
5    ||   yes

ROW_NUMBER AS NoId.

Ответы

Ответ 1

Попробуйте этот запрос

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

FIDDLE

| id | value | cnt |
--------------------
|  1 |   yes |   1 |
|  3 |   yes |   2 |
|  4 |   yes |   3 |
|  6 |   yes |   4 |
|  9 |   yes |   5 |

Ответ 2

SQLite Release 3.25.0 добавит поддержку оконных функций

2018-09-15 (3.25.0)

  1. Добавить поддержку для оконных функций

Функции окна:

Оконная функция - это специальная функция SQL, в которой входные значения берутся из "окна" из одной или нескольких строк в наборе результатов оператора SELECT.

SQLite поддерживает следующие 11 встроенных оконных функций:

row_number()

Номер строки в текущем разделе. Строки нумеруются, начиная с 1, в порядке, определенном предложением ORDER BY в определении окна, или в произвольном порядке, в противном случае.

Таким образом, ваш запрос может быть переписан как:

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

Демо-версия db-fiddle.com

Ответ 3

Я немного исправился с fiddleanswer и получил точно результат, как ожидалось

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

Ответ 4

ОБНОВЛЕНИЕ: sqlite3 версии 3.25 теперь поддерживает оконные функции, включая:

row_number() over (упорядочить по идентификатору)

Документация SQLITE3