Как использовать 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
| 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)
- Добавить поддержку для оконных функций
Функции окна:
Оконная функция - это специальная функция 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