【发布时间】:2019-07-06 11:34:03
【问题描述】:
我有一个报价表和交易表,并想列出报价表并加入交易表,匹配的时间戳严格小于交易的时间戳。
例如:
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 |
+------------+-----+-----+----+
是否有一个连接函数可以根据严格小于时间的时间戳进行匹配,而不是最多并包含?
【问题讨论】:
-
通常,此连接以
aj[`time;t;q]的形式完成,如wiki 上的此示例所示,因为您正在查看交易前的报价。尽管在这种情况下,3 笔交易的输出只有 3 行。 -
它并非严格小于的事实是因为
aj基于bin和bin小于或等于 - 请参阅 code.kx.com/q/ref/search/#bin-binr 。所提出的时移技术将起作用,尽管这会对性能产生影响,尤其是在磁盘连接的情况下。或许可以通过修改标准的aj来制作自己的aj函数(用一些自定义逻辑替换bin)
标签: kdb