【问题标题】:q kdb fill missing fxratesq kdb 填充缺失的 fxrates
【发布时间】:2017-08-16 15:10:13
【问题描述】:

我在 kdb 中有一个包含 3 列的表:日期、货币、汇率。一些 fx 丢失了,我想用前一天的值替换 null fx,显然是相同的货币。我不能按原样使用填充,因为它可能会混合货币。我尝试使用 group by 的变体填充,但它不起作用。你知道怎么做吗?这是我的不正确查询:

update fills fx from (`ccy`date xasc t)

这是原始表格(组成数据):

date    ccy fx
2017.08.01  AUS 0.57
2017.08.01  CAN 0.61
2017.08.01  EUR 0.91
2017.08.01  USD 0n
2017.08.02  AUS 0n
2017.08.02  CAN 0.62
2017.08.02  EUR 0n
2017.08.02  USD 0n
2017.08.03  AUS 0n
2017.08.03  CAN 0n
2017.08.03  EUR 0n
2017.08.03  USD 0n
2017.08.04  AUS 0.57
2017.08.04  CAN 0.62
2017.08.04  EUR 0.91
2017.08.04  USD 0.78
2017.08.05  AUS 0.59
2017.08.05  CAN 0.61
2017.08.05  EUR 0.92
2017.08.05  USD 0.79
2017.08.06  AUS 0.58
2017.08.06  CAN 0.62
2017.08.06  EUR 0.91
2017.08.06  USD 0.77

【问题讨论】:

    标签: kdb q-lang


    【解决方案1】:

    你可以使用update - by:

    update fills fx by ccy from t
    

    【讨论】:

      【解决方案2】:

      非常接近 - 您需要做的就是添加“by”:

      t:([]date:raze 3#enlist .z.d+til 100;ccy:300#`EUR`CAN`AUS;fx:300?(1.0 0.2 0.4 0n))
      
          10#t
          date       ccy fx 
          ------------------
          2017.08.16 EUR 1  
          2017.08.17 CAN 0.4
          2017.08.18 AUS    
          2017.08.19 EUR 0.4
          2017.08.20 CAN 0.2
          2017.08.21 AUS 1  
          2017.08.22 EUR 1  
          2017.08.23 CAN    
          2017.08.24 AUS 1  
          2017.08.25 EUR 1  
      
          10# update fills fx by ccy from t 
          date       ccy fx 
          ------------------
          2017.08.16 EUR 1  
          2017.08.17 CAN 0.4
          2017.08.18 AUS    
          2017.08.19 EUR 0.4
          2017.08.20 CAN 0.2
          2017.08.21 AUS 1  
          2017.08.22 EUR 1  
          2017.08.23 CAN 0.2
          2017.08.24 AUS 1  
          2017.08.25 EUR 1  
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-10-25
        • 1970-01-01
        • 1970-01-01
        • 2018-09-14
        • 2016-08-26
        相关资源
        最近更新 更多