2017-09-07 12 views
0

に窓関数に条件を適用し、私はこのデータを持っていると言う:は赤方偏移

status | source | communication 
-------------------|---------------- 
start | 1  | 1 
changed | 2  | 1 
changed | 2  | 1 
changed | 2  | 1 
end  | 1  | 1 

私は私が(ここでは示されていない)タイムスタンプ列によって通信欄及び順序に遅れ機能分割を使用することができますことを知っています以前のソースを取得します。

しかし、私はどのようにして元のソースを得るのですか?status is not 'Changed'すべての行を保持していますか?

status | source | communication | prev_source 
-------------------|----------------|----------- 
start | 1  | 1    | null 
changed | 2  | 1    | 1 
changed | 2  | 1    | 1 
changed | 2  | 1    | 1 
end  | 1  | 1    | 1 
+0

あなたの質問には、行の注文に使用する列を含める必要があります。 –

答えて

1

あなたはignore nullsを使用してこの操作を行うことができます:このような

select t.*, 
     lag(case when status <> 'changed' then source end ignore nulls) over 
      (order by ??) as prev_source 
from t; 

また、行の順序を指定する列を必要としています。それが??の目的です。

+0

こんにちは!これは、ステータスが変更された行が1つしかない場合、「開始」と「終了」の間にステータスが「変更されました」という複数の行がある場合はどうすればよいのでしょうか? – rodrigocf

+0

@rodrigocf。 。 。おっと、コードからヌルを無視してしまいました。 –

関連する問題