在q kdb中获取上一季度的最后一个工作日和第一个工作日(工作日)

时间:2019-06-10 09:17:08

标签: kdb

我想获取上个季度的最后一个工作日(工作日),如2019.03.31是星期日,所以我的要求是获取输出为2019.03.29。
我编写了下面的代码,这些代码可以很好地工作,但看上去并不整洁,在我看来,kdb有资格提供比此更优雅的解决方案。

{$[1<mod[dt:("d"$3 xbar "m"$.z.d)-x;7];dt;.z.s x+1]}[1]

编辑-与上一季度的第一个工作日类似,如何改进以下代码:

{$[1<mod[dt:x+"d"$ -3+3 xbar "m"$.z.d;7];dt;.z.s x+1]}[0]
OR
{d:"d"$ -3+3 xbar "m"$x;$[2>r:d mod 7;d+$[0=r;2;1];d]}.z.d / Based on solution below

1 个答案:

答案 0 :(得分:3)

您可以使用以下内容:

{d:-1+"d"$3 xbar "m"$x;$[2>r:d mod 7;d-1+r;d]}.z.d

它的运行速度比您的方法快

q)\ts:100000 {$[not((dt:("d"$3 xbar "m"$ .z.d)-x) mod 7) in 0 1; dt; .z.s x+1]}[1]
1031 4752
q)\ts:100000 {d:-1+"d"$3 xbar "m"$x;$[2>r:d mod 7;d-1+r;d]}.z.d
399 4976