web-dev-qa-db-ja.com

sqliteでROW_NUMBERを使用する方法

以下に私のクエリを示します。

select * from data where value = "yes";

私のIDは自動インクリメントであり、下には特定のクエリの結果があります。

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

SqliteでROW_NUMBERを使用する方法は?そのため、以下に示す結果を得ることができます。

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

ROW_NUMBER AS NoId。

26
Abox LsrKdz

このクエリを試してください

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 |
22
Meherzad

SQLiteリリース3.25. はウィンドウ関数のサポートを追加します

2018-09-15(3.25.0)

  1. ウィンドウ関数のサポートを追加する

ウィンドウ関数

ウィンドウ関数は、入力値がSELECTステートメントの結果セット内の1つ以上の行の「ウィンドウ」から取得される特別なSQL関数です。

SQLiteは、次の11の組み込みウィンドウ関数をサポートしています。

row_number()

現在のパーティション内の行の番号。行には、ウィンドウ定義のORDER BY句で定義された順序で、またはそれ以外の任意の順序で、1から始まる番号が付けられます。

したがって、クエリは次のように書き換えられます。

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

db-fiddle.com demo

11
Lukasz Szozda

更新:sqlite3バージョン3.25は、次のウィンドウ関数をサポートするようになりました。

row_number()over(idによる順序)

SQLITE3ドキュメント

2
v12golfcart

私はフィドルアンサーをいくらか修正し、期待どおりの結果を得ました

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
2
user3198319