我在一个表中有如下模式的数据: date、time、sym、book、pnl
这是一个时间序列。sym/book作为列定义时间序列。
我有一个特殊的用例,我需要想出另一个将两本书结合在一起的时间序列。
如果这不是一个时间序列,这将是相当简单的,只需通过book/sym求和,过滤我想要合并的书籍,然后再次与新的书名求和(常量)。
但我不确定如何创建一个具有一个书值的时间序列(这是在任何给定时间的两个书值的组合,例如,两个书组合的不同时间)。重要的是,时间序列不是均匀的/均匀的,时间对于bookId/sym组合来说是“随机的”。
t: ([] date: 4#.z.D; time: (07:00; 07:00; 07:01; 07:02); sym: `x`x`x`x; book: `book1`book2`book2`book1; v: (100; 0; 200; 200))
c: ([] date: 3#.z.D; time: (07:00; 07:01; 07:02); sym: `x`x`x; book: `newbook; v: (100; 300; 400))发布于 2020-12-22 22:34:13
根据您的预期输出,假设您想知道多本书在任何给定时间的总持有量,我认为这应该符合您的目的。
q)select date,time,sym,book:`newbook,v:sum each vb from update vb:@[;;:;]\[()!();book;v]from t
date time sym book v
--------------------------------
2020.12.22 07:00 x newbook 100
2020.12.22 07:00 x newbook 100
2020.12.22 07:01 x newbook 300
2020.12.22 07:02 x newbook 400这个解决方案是使用扫描(\)为每本书创建一个最新值的字典,然后对它们求和。可能需要添加distinct,以防有任何行没有发生任何更改。
https://stackoverflow.com/questions/65408308
复制相似问题