Получить последний день недели и первый день недели (рабочий день) предыдущего квартала в q kdb - PullRequest
3 голосов
/ 10 июня 2019

Я хочу, чтобы последний рабочий день (будний день) предыдущего квартала, например, 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 Ответ

3 голосов
/ 10 июня 2019

Вы можете использовать следующее:

{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
...