Я новичок в 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
Спасибо за помощь, Дэн