時系列データで連続する値をグルーピングするSQL

[code]

    I,T,V
    A,1,0
    A,2,0
    A,3,1
    A,4,1
    A,5,1
    A,6,0
    A,7,1
    A,8,1
    A,9,0
    A,10,0
    
[/code]

こんなデータがあった時以下のようなデータをSQLで生成するにはどうすればいいのでしょうか？

①  
Iのグルーピング,V=1が連続するグループの数  
A,2

②  
I毎のVが1が連続するグループのIDのグルーピング,I毎のV=1が連続するグループの最初のT,I毎のV=1が連続するグループの最後のT  
A3,3,5  
A7,7,8




この回答ではテーブル名を`X`とします。

> Iのグルーピング,V=1が連続するグループの数

値が連続するものをグループ化し、そのグループ数の数える方法ですが、`T`と`T+1`を比較し存在しない場合をグループの先頭を検出できます。

[code]

    SELECT T
    FROM X
    WHERE T NOT IN (SELECT T+1 FROM X)
    
[/code]

これをベースに、グループ化や条件を付けていけば組み立てることができます。最終的にはこんな感じでしょうか。

[code]

    SELECT I, COUNT(*)
    FROM X AS X1
    WHERE V=1 AND T NOT IN (SELECT T+1 FROM X AS X2 WHERE V=1 AND X1.I=X2.I)
    GROUP BY I
    
[/code]

> I毎のVが1が連続するグループのIDのグルーピング,I毎のV=1が連続するグループの最初のT,I毎のV=1が連続するグループの最後のT

こちらは自己回答されているように`ROW_NUMBER()`等が必要になってきます。

