Get last weekday and first weekday (working day) of the previous quarter in q kdb

Viewed 774

I want to get last working day(Weekday) of previous quarter like 2019.03.31 was Sunday, so my requirement is to get output as 2019.03.29.
I have written below code which works perfectly but seems untidy and to me it looks like kdb is eligible of providing much elegant solution than this.

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

Edit - Similarly for first week day of previous quarter, How can below code be improved:

{$[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 Answers

You could use the following:

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

It runs slightly faster than your method

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
Related