我有一个报价表和一个交易表,想列出报价表并加入严格小于该交易时间戳的时间戳匹配的交易表。
例如:
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 |
+------------+-----+-----+----+
是否存在可以根据严格小于时间(而不是时间)的时间戳进行匹配的联接函数?
答案 0 :(得分:0)
我认为的一种“黑客”方式是将所有交易转移至执行aj的最小时间单位,然后再回退
答案 1 :(得分:0)
我认为,如果您对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
这会转移时间以避免匹配相等的时间,但是在开始时每个引号都不包含一行。
我认为,如果您希望将交易加入报价,而不是像我已经做过的那样将报价加入交易中,则可能需要考虑一些区分示例中同时发生的两个交易的方法。一种执行此操作的方法可能是使用它们到达的顺序,即将第一个报价匹配到第一个交易。