为什么“ asof”联接不能同时是“最近”联接和“严格”联接?

时间:2019-05-20 23:10:29

标签: empirical-lang

经历demo时,为何Empirical禁止以下行为?

>>> join trades, events on symbol asof timestamp nearest strict
Error: join 'asof' cannot be both 'nearest' and 'strict'

有没有办法匹配最接近但不精确的时间戳?

1 个答案:

答案 0 :(得分:0)

这是不允许的,因为匹配的行可能乱序。想象一下这个设置:

data LeftItem: time: Time, code1: Char end
data RightItem: time: Time, code2: Char end
let left = !LeftItem([Time("09:30"), Time("09:31")], ['A', 'B'])
let right = !RightItem([Time("09:30"), Time("09:31")], ['a', 'b'])

我们现在有了以下数据框:

>>> left
     time code1
 09:30:00     A
 09:31:00     B

>>> right
     time code2
 09:30:00     a
 09:31:00     b

如果有一个“最近严格”,那么结果将是

     time code1 code2
 09:30:00     A     b
 09:31:00     B     a

这是正确,因为我们有不精确的最接近的行,但这没有任何意义。我们希望时间会单调增加,所以匹配的行永远不能倒序。

因此,最明智的方法是允许“限制”“向后”和“向前”方向,但不允许“最近”。