2017-08-25 2 views
0

Kann die Verzögerung mit 2 Spalten in der Reihenfolge verwendet werden? Wenn nicht, wie würde ich das tun?SQL - LAG() Sortieren nach 2 Spalten?

Hier ist, was ich habe jetzt:

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

Hier ist, was ich will:

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

Ich brauche die Verzögerung der Sub_ID zu priorisieren, da alle Unter ID Operationen zuerst geprüft werden müssen.

Dies ist eine Visualisierung dessen, was ich meine/will. Hier

ist die Anfangswerte/Tabelle:

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

Hier ist, was ich nach der Verzögerungsfunktion soll mit 2 Bestellung von auftritt

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

So im Wesentlichen möchte ich die Verzögerungsfunktion zu tun mit alle Werte, die eine sub_id = 1 getrennt und vor allen Werten mit sub_id = 0 haben. Nachdem er alle sub_id = 1 Werte getan hat, sollte es von sub_id = 1 zur ersten seq_no mit sub_id = 0

gerade herauszufinden, das Bestehen der letzte Wert geht auf die sub_id = 0 Werte weiterhin, wie zuerst alle sub_id = 1 Werte zu tun und dann die sub_id = 0 Werte tun, ist gut genug, ich kann den Rest wahrscheinlich herausfinden.

+0

Haben Sie es ausprobiert? Was ist passiert? – JohnHC

+1

Warte ... es hat funktioniert. LOL – Azuraith

Antwort

1

Für Ihre gewünschten Ergebnisse mit lag(), müssen Sie 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 Demo: http://rextester.com/YHCIOD53469

kehrt:

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

Sie können auch die gleichen Ergebnisse lead(value) over (order by sub_id, seq_no desc) verwenden.

+0

LOL danke. Ich hätte das wahrscheinlich zuerst ausprobieren sollen, bevor ich diese Frage gestellt habe ... es hat genau so funktioniert, wie ich es erwartet hätte. – Azuraith

+0

@Azuraith Das ist die beste Vorgehensweise, ja. – SqlZim