2017-08-25 3 views
0

2列の遅延を使用することは可能ですか?もしそうでないなら、これをどうやってやるの?ここでSQL - LAG()2列で注文しますか?

は私が今持っているものである:ここでは

LAG(GOOD_QTY) Over (Order By SEQUENCE_NO) As Value 

は私が欲しいものである:すべてのサブIDの操作が最初にチェックする必要があるため

LAG(GOOD_QTY) Over (Order By SUB_ID DESC,SEQUENCE_NO) As Value 

私はsub_idはを優先するラグを必要としています。

これは私が何を意味するのかを視覚化したものです。

ここ
SEQ_NO SUB_ID value 
------------- 
10  0   50 
30  0  200 
20  0   75 
25  0  100 
10  1  150 
20  1  250 

だから基本的に私はラグ機能をしたい

SEQ_NO SUB_ID value 
------------- 
10  0  250 
30  0  100 
20  0   50 
25  0  75 
10  1  NULL 
20  1  150 

を発生することで、私は2オーダーとラグ関数の後に何をしたいです:ここでは

は初期値/テーブルですすべての値は sub_id = 1とは別に、すべての値の前には sub_id = 0となります。それは

sub_id = 0ちょうど最初にすべてのsub_id = 1値を行う方法を考え出すと、その後sub_id = 0値をやって最初のSEQ_NOにsub_id = 1から、それは最後の値を渡すsub_id = 0値に行き続けなければならないすべてのsub_id = 1値をしたら良いです十分に、私は残りの部分をおそらく把握することができます。 lag()を使用して、ご希望の結果を得るために

+0

試しましたか?何が起こった? – JohnHC

+1

待って...それは働いた。 LOL – Azuraith

答えて

1

、あなたはorder by sub_id desc, seq_no行う必要があります。

select seq_no, sub_id 
    , value = lag(value) over (order by sub_id desc, seq_no) 
from t 
order by sub_id, seq_no 

rextesterデモ:http://rextester.com/YHCIOD53469

リターン:

+--------+--------+-------+ 
| seq_no | sub_id | value | 
+--------+--------+-------+ 
|  10 |  0 | 250 | 
|  20 |  0 | 50 | 
|  25 |  0 | 75 | 
|  30 |  0 | 100 | 
|  10 |  1 | NULL | 
|  20 |  1 | 150 | 
+--------+--------+-------+ 

あなたはまたlead(value) over (order by sub_id, seq_no desc)を使用して同じ結果を得ることができます。

+0

LOLありがとうございました。私はおそらく、この質問を投稿する前にこれを最初に試しておくべきだった...それは私が期待するように正確に働いた。 – Azuraith

+0

@Azuraithそれは最高の行動コースです、はい。 – SqlZim