我有一个随机的数据表-带有日期和数字:
Date Open Volume abschange
2016.12.08D00:00:00.000000000 11035.76 1.74835e+008 1.30177
2016.12.09D00:00:00.000000000 11170.18 1.0383e+008 0.2994598
2016.12.12D00:00:00.000000000 11198.42 8.98117e+007 0.07331357
...
2016.12.30D00:00:00.000000000 11443.31 4.18109e+007 0.3298871
2017.01.02D00:00:00.000000000 11426.38 4.74561e+007 1.504853
因此,从此表中,我希望能够创建一个列表,其中包含该日期之前10天中的所有条目,其abschange> 1。
我认为从这些日期开始是最简单的:
Date abschange
---------------------------------------
2016.12.08D00:00:00.000000000 1.30177
2017.01.02D00:00:00.000000000 1.504853
2017.01.25D00:00:00.000000000 1.099709
2017.01.31D00:00:00.000000000 1.344625
2017.02.06D00:00:00.000000000 1.016427
2017.02.21D00:00:00.000000000 1.265196
然后创建一个平面列表:
mynewdates: raze tablewithDateAndabschange each
这给了我
2016.12.08D........ 2017.01.02D......
然后,当我想为该列表中的每个条目添加10个以前的日期时,我就会陷入困境。
我是否可以根据第一张表实际上在一行代码中得到想要的结果,还是应该遵循我所走的路径?
对于两者-如果可能,对此的可能解决方案是什么?
答案 0 :(得分:1)
如果我的理解正确,那么您的要求是:
以下查询将创建该地图。它基于以下假设:
如果上述条件不成立,则需要在下面的查询中进行较小的更改以使用重复项和无序列表。
表没有键。
q) (tbl[`Date]a)!b@'where@'not null b:tbl[`Date] -1+(a:where 1<tbl`abschange)-\:til 10
更新:基于评论部分的讨论。
只需添加第二步即可检查第一个结果的日期列表是否为空。在这种情况下,请从该日期开始生成最后10个日期。
最后,它会生成一个表格,其中每行包含每个日期的先前日期(最多10个),且具有Abschange> 1。
q)d:b@'where@'not null b:tbl[`Date] -1+(a:where 1<tbl`abschange)-\:til 10
q)d[0]:$[0=count d 0;(t[`Date]a 0)-1+til 10;d 0]
q)([]dates:d)