Следующий небольшой фрагмент примерной таблицы, используемой для расчета среднего разделения за период положительного разделения:
q)show tab:([]time:asc 20?03:00:00;sep:(20?1 -1)*20?1f)
time sep
-------------------
00:18:02 0.6425202
00:30:59 0.5666474
00:43:05 0.2966318
...
Следующая функция имеет 2 шага, сначала нужно получить разницу во времени между тиками, а затем суммировать время и получить среднее разделение групп непрерывных строк с положительным или отрицательным разделением (первое утверждение). Таким образом, вывод может быть отфильтрован, чтобы получить только те строки, которые имеют положительное разделение.
q)f:{t:select sum time,avg sep by sums differ sep>0 from update deltas time from x;select time,sep from t where sep>0}
q)f tab
time sep
-------------------
00:12:06 0.5019331
00:00:23 0.04909149
00:07:14 0.9275499
00:08:45 0.4221353
00:07:05 0.7766876
Чтобы повторить для отрицательного результата, вы можете заменить >0
на <0
. Я не был уверен, как вы хотите обрабатывать нули, поэтому я использовал >0
вместо signum
.