我是KDB/Q的新手,並且有一個關於獲取兩個(不一定相鄰)行之間區別的問題。KDB/Q中的行之間的區別
我只有一個表,它看起來像下面:
q)tickers:`ibm`bac`dis`gs`ibm`gs`dis`bac
q)pxs:100 50 30 250 110 240 45 48
q)dates:2013.05.01 2013.01.05 2013.02.03 2013.02.11 2013.06.17 2013.06.21 2013.04.24 2013.01.06
q)trades:([tickers;dates];pxs)
q)trades
tickers dates | pxs
------------------| ---
ibm 2013.05.01| 100
bac 2013.01.05| 50
dis 2013.02.03| 30
gs 2013.02.11| 250
ibm 2013.06.17| 110
gs 2013.06.21| 240
dis 2013.04.24| 45
bac 2013.01.06| 48
我希望能夠在存儲當前和以前的價格之間的差額表中的一個或者另一個列,或結構相似的其他結構。由此產生的需要回答的關鍵問題是「股價變化與前一次價格變化相比有多大變化?」
到目前爲止,我已經試過沿着線的東西:
select tickers, dates, pxs - pxs(dates bin (exec dates from trades where tickers = trades.tickers)) from trades
其並未真正發揮作用(所有)。絕對是因爲試圖做類似SQL的查詢並且有一個面向行的思維模式。
請找到的個例低於追捧答案:
q)trades: do magic with trades
q)trades
tickers dates | pxs | delta
------------------| --- | -----
ibm 2013.05.01| 100 | 0
bac 2013.01.05| 50 | 0
dis 2013.02.03| 30 | 0
gs 2013.02.11| 250 | 0
ibm 2013.06.17| 110 | 10
gs 2013.06.21| 240 | -10
dis 2013.04.24| 45 | 15
bac 2013.01.06| 48 | -2
感謝您的幫助, 丹
非常好,非常感謝! – user1158959
澄清內聯匿名函數'{0,1_deltas x}':逗號是列表連接運算符,'1_'表示從delta結果中刪除第一個條目。由於函數被調用時沒有使用''''或'each',函數只能在整列數據中調用一次。如果'0,1_'被刪除,第一個delta將是'100',這通常是不希望的行爲。 – kevinarpe