KDB +如何加入特定日期的数据

问题描述 投票:2回答:1

我有下表,其中包含一些国家的时间序列数据:

t1 : ([]dates:"d"$4+til 6) cross ([]country:`PT`AR`MR`LT; category1:1+til 4)

 dates      country category1
----------------------------
2000.01.05 PT      1        
2000.01.05 AR      2        
2000.01.05 MR      3        
2000.01.05 LT      4        
2000.01.06 PT      1        
2000.01.06 AR      2        
2000.01.06 MR      3        
2000.01.06 LT      4        
2000.01.07 PT      1        
2000.01.07 AR      2        
2000.01.07 MR      3        
2000.01.07 LT      4                 
..

我有另一个表格,其中包含t1的一些补充数据,但这些表格仅在某个时间点有效,如下所示:

t2 : (([]validFrom:"d"$(0;6)) cross ([]country:`PT`AR`MR`LT)),'([]category2:1000*(1+til 8)) 

validFrom  country category2
----------------------------
2000.01.01 PT      1000     
2000.01.01 AR      2000     
2000.01.01 MR      3000     
2000.01.01 LT      4000     
2000.01.07 PT      5000     
2000.01.07 AR      6000     
2000.01.07 MR      7000     
2000.01.07 LT      8000     

我的问题是:我如何加入t1t2以获取category2列中的dates列,该t1列与validFrom中的t2日期“兼容”,因此生成的表格如下所示:

dates      country category1 category2
--------------------------------------
2000.01.05 PT      1         1000     
2000.01.05 AR      2         2000     
2000.01.05 MR      3         3000     
2000.01.05 LT      4         4000     
2000.01.06 PT      1         1000     
2000.01.06 AR      2         2000     
2000.01.06 MR      3         3000     
2000.01.06 LT      4         4000     
2000.01.07 PT      1         5000     
2000.01.07 AR      2         6000     
2000.01.07 MR      3         7000     
2000.01.07 LT      4         8000        
..
left-join q kdb
1个回答
4
投票

你可以使用asof join从category2获取最新的t2日期

aj[`country`dates;t1;`dates xasc `dates xcol t2]

只是不要忘记在表2中将validFrom列重命名为dates并按dates对其进行排序

© www.soinside.com 2019 - 2024. All rights reserved.