仅将公式应用于当前行和上一行(Q / KDB)

时间:2018-02-07 16:34:24

标签: kdb q-lang

我有一个我想逐行应用的公式,这样在计算中只包含任何给定行上的当前行和前一行。考虑这些数据:

data:([]dt:2017.01.05D19:45:00.238248239 2017.01.05D20:46:00.282382392 2017.01.05D21:47:00.232842342 2017.01.05D22:48:00.835838442 2017.01.05D20:49:00.282382392;sym:`AAPL`GOOG`AAPL`BBRY`GOOG;price:101.20 800.20 102.30 2.20 800.50;shares:500 100 500 900 100)

data:
dt                            sym    price   shares
2017.01.05D19:45:00:238248239 AAPL   101.20  500
2017.01.05D20:46:00:282382392 GOOG   800.20  100
2017.01.05D21:47:00:232842342 AAPL   102.30  500
2017.01.05D22:48:00:835838442 BBRY     2.20  900
2017.01.05D20:49:00:282382392 GOOG   800.50  100

公式select sum price from data where i=(last;i)fby sym将产生我需要的结果,但它只会产生1个数据点。我需要在数据集的每一行完成计算。

扫描(“\”)会应用此行为,但遗憾的是我在使用select语句时不知道如何执行此操作。

2 个答案:

答案 0 :(得分:2)

不完全确定您想要的是什么,但以下内容使用每个<table>的最新var table = doc.DocumentElement; var voornaam = (XmlElement)table.SelectSingleNode("*[@name='Voornaam']"); XmlElement newElement = doc.CreateElement("column"); newElement.SetAttribute("name", "Tussenvoegsel"); table.InsertAfter(newElement, voornaam); 来计算总和price

sym

对于上面给出的最终数据点,它给出了相同的答案。

答案 1 :(得分:1)

您还可以获得每个索引的最后价格,如下所示:

{[x;y] exec sum price from x where i<=y, i=(last;i) fby sym}[data]each til count data
101.2 901.4 902.5 904.7 905