2016-09-16 4 views
2

私は次の例のように前の行との違いに基づいてグループ化する必要のあるソートされた値(ポイントと呼ばれます)を持っています。新しいグループが前のポイントの差が10 lag窓関数を用いpostgresqlグループと前の行との差異

point group 
    1  1 
    2  1 
    3  1 
101  2 
103  2 
105  2 
213  3 
214  3 
215  3 

よりも大きい場合、私はポイントとの間の差を計算することができるが、私は」開始される。この例では

上記の例のようにグループを構築するための部分が欠落しています。

ご協力いただきありがとうございます。

答えて

2
select point, sum(inc) over (order by point)+1 as group 
from (
    select point, 
    (case when point-lag(point,1) over (order by point) > 1 then 1 else 0 end) inc 
    from whatevertable 
) base 
order by point 

サブ選択なしで行う方法があるかもしれませんが、これは私が思いついたものです。

+1

素晴らしいソリューション!私はいつも窓関数としてもsum()のような通常の集合関数を使うことが可能であることを忘れています。 –

関連する問題