我有一个引价表和贸易表,并想列出引价表和加入贸易表匹配时间戳严格小于贸易的时间戳。
例如:
q:([]time:10:00:00 10:01:00 10:01:00 10:01:02;sym:`ibm`ibm`ibm`ibm;qty:100 200 300 400)
t:([]time:10:01:00 10:01:00 10:01:02;sym:`ibm`ibm`ibm;px:10 20 25)
aj[`time;q;t]返回
+------------+-----+-----+----+
| time | sym | qty | px |
+------------+-----+-----+----+
| 10:00:00 | ibm | 100 | |
| 10:01:00 | ibm | 200 | 20 |
| 10:01:00 | ibm | 300 | 20 |
| 10:01:02 | ibm | 400 | 25 |
+------------+-----+-----+----+但我想要得到的结果如下:
+------------+-----+-----+----+
| time | sym | qty | px |
+------------+-----+-----+----+
| 10:00:00 | ibm | 100 | |
| 10:01:00 | ibm | 100 | 10 |
| 10:01:00 | ibm | 100 | 20 |
| 10:01:02 | ibm | 300 | 25 |
+------------+-----+-----+----+有没有一个连接函数可以基于严格小于time的时间戳进行匹配,而不是to-to和including?
发布于 2019-02-10 10:43:22
我认为如果您对aj[`time;q;t]做了一些变化,那么您将不能修改qty列,因为表t不包含它。相反,您可能需要使用更“传统”的aj[`time;t;q]
q)@[;`time;+;00:00:01]aj[`time;@[t;`time;-;00:00:01];q]
time sym px qty
-------------------
10:01:00 ibm 10 100
10:01:00 ibm 20 100
10:01:02 ibm 25 300这会转移时间,以避免在时间相等的情况下进行匹配,但不会为开始时的每个引用包含一行。
我认为,如果您希望将交易加入报价,而不是像我所做的那样,将报价加入交易,那么您可能需要考虑一些方法来区分在您的示例中同时发生的两个交易。这样做的一种方法是使用他们到达的订单,即将第一个报价与第一个交易相匹配。
发布于 2019-02-10 09:16:23
我认为一种“黑客”的方式就是将所有的交易移动到最小的时间单位,做aj,然后再移动回来
https://stackoverflow.com/questions/54612223
复制相似问题