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)