2016-06-21 12 views
0

Ich habe versucht, zwei Update-Anweisungen zusammen zu kombinieren. Es ist, weil, wenn ich nicht zusammen aktualisiere, die erste Update-Anweisung die zweite Update-Anweisung betrifft, aber ich bin mir nicht sicher, wie.Kombinieren Sie zwei Update-Anweisungen zusammen in kdb +

tab:update trade:`$ssr[;"-01";""]each string deal from tab where ((-1#'string trade) like enlist "0") and (-3#'string deal) like "-01" 
tab:update trade:`$ssr[;"-01";"SP"]each string deal from tab where ((-1#'string trade) like enlist "1") and (-3#'string deal) like "-01"; 

Wenn ich nicht kombinieren kann meine erste Aussage 1 muß handeln und später eine zweite Aktualisierungs Anweisung SP hinzugefügt werden, da es 1. ist

Antwort

0
t:([] trade:`trade0`trade0`trade1`trade1`trade2; deal:`1_00`2_01`3_00`4_01`5_01) 

update newtrade:`$ {$[y>1;x;ssr[x;"_01";("";"_SP")@y]]} ./: flip(string deal;"01"?last each string trade) from t where deal like "*_01" 


trade deal newtrade 
-------------------- 
trade0 1_00   
trade0 2_01 2  
trade1 3_00   
trade1 4_01 4_SP  
trade2 5_01 5_01  
+0

Ich denke, letzte Zeile Ausgang nicht nach der Anforderung ist. – Rahul

+0

@Rahul: ja du hast Recht. Ich habe die Antwort bearbeitet, aber natürlich ist es jetzt fast dasselbe wie deine –

0

Beispiel Hilfe von Alexander Taking:

q) t:([] trade:`trade0`trade0`trade1`trade1`trade2; deal:`$("1-00";"20-01";"3-00";"4-01";"5-01")) 

Lösung:

  • prüfen, ob Handel mit Element der Liste übereinstimmt (* 0; * 1).

  • erhalten Sie den Index des passenden Elements.

  • 2 bedeutet keine Übereinstimmung, die
  • Else Verwendung ssr original Handelswert bedeutet, gibt die Zeichenfolge mit dem richtigen Wert zu ersetzen -> ("", "SP") @ a.

    q) t2: update trade:{$[2>a:(x like/: ("*0";"*1"))?1b;`$ssr[y;"-01";("";"SP")@a];x]}'[trade;string deal] from t where deal like "*-01" 
    

Original:

q) t:update trade:`$ssr[;"-01";""]each string deal from t where ((-1#'string trade) like enlist "0") and (-3#'string deal) like "-01" 
q) t:update trade:`$ssr[;"-01";"SP"]each string deal from t where ((-1#'string trade) like enlist "1") and (-3#'string deal) like "-01"; 

q) t~ t2/true