KDB + Как объединить данные для определенных дат - PullRequest
0 голосов
/ 28 февраля 2019

У меня есть следующая таблица, содержащая некоторые данные временных рядов о некоторых странах:

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     

Мой вопрос: как мне объединить t1 и t2, чтобы получить столбец 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        
..

1 Ответ

0 голосов
/ 28 февраля 2019

Вы можете использовать asof присоединиться, чтобы получить самые последние category2 из t2 по дате

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

Только не забудьте переименовать validFrom столбец в dates в таблице 2 и отсортировать по dates

...