KX Community

Find answers, ask questions, and connect with our KX Community around the world.
KX Community Guidelines

Home Forums kdb+ Query for fetching data for windows Reply To: Query for fetching data for windows

  • rocuinneagain

    Member
    May 17, 2024 at 3:30 pm

    You could make windows like so:

    q)start:0D 
    q)duration:1D 
    q)length1:0D00:20 
    q)length2:0D00:10 
    q)windows:{flip (0;y-1)+\:y*til `long$x div y}'[duration;(length1;length2)] 
    q)(first;last)@\:windows 0 0D00:00:00.000000000 0D00:19:59.999999999 0D23:40:00.000000000 0D23:59:59.999999999 
    q)(first;last)@\:windows 1 0D00:00:00.000000000 0D00:09:59.999999999 0D23:50:00.000000000 0D23:59:59.999999999 
    q)t:([] time:100?1D;sym:100?`A`B`C) 
    time sym 
    ------------------------
    0D11:37:38.441374450 A 
    0D16:23:13.911677598 A 
    0D03:40:38.809463381 C 
    0D12:50:31.973013281 B 
    0D10:58:33.142468035 C 
    0D00:11:36.601854264 B

    Query for small tables for each sym for each windows:

    syms:exec distinct sym from t 
    q){[x;y;z] select from x where sym=y,time within z}[t](.)/:syms cross enlist each windows 0 
    +`time`sym!(`timespan$();`symbol$()) 
    +`time`sym!(,0D03:19:44.361107647;,`A) 
    +`time`sym!(0D03:20:29.103351384 0D03:28:31.211699992;`A`A) 
    ... 
    +`time`sym!(,0D20:47:50.484825968;,`B) 
    +`time`sym!(,0D21:14:37.927203476;,`B) 
    +`time`sym!(0D21:39:42.773356139 0D21:37:00.400066673;`B`B) 
    +`time`sym!(`timespan$();`symbol$()) 
    +`time`sym!(,0D22:09:45.092769563;,`B)