2013-05-22 1 views
4

Вычисление взвешенных средних легко в kdb благодаря функции wavg. Как рассчитать задержку между двумя последовательными рядами раз и использовать эти значения в качестве параметра весов для wavg?Как рассчитать средневзвешенное по времени значение kdb?

Что-то вроде:

`date`ts xasc select date,ts,mytw:(next ts - ts) wavg mycolumnval from pmd where date=2013.05.22 

next дает следующий столбец строки в запросе, но я не могу понять, как вычесть два тс значения и использовать их в wavg.

ОБНОВЛЕНИЕ Решение было использовать круглые скобки: ((next ts) - ts). Обратите внимание, что я не могу использовать deltas[ts]. Это будет производить различные веса:

08:15:19.811 00:00:00.000 
08:15:19.811 00:00:00.001 
08:15:19.812 00:00:00.014 
08:15:19.826 00:00:07.305 
08:15:27.131 NULL 

Это deltas[ts]:

08:15:19.811 08:15:19.811 
08:15:19.811 00:00:00.000 
08:15:19.812 00:00:00.001 
08:15:19.826 00:00:00.014 
08:15:27.131 00:00:07.305 
+0

вы можете дать пример вывода вы ожидаете? Также в вашем calc, (next ts - ts) будет оцениваться справа налево, поэтому он будет просто следующий в списке нулей. Здесь вы должны использовать дельта. – user1895961

ответ

1

Необходимых Скобки вокруг «следующих ц»:

`date`ts xasc select date,ts,mytw:((next ts) - ts) wavg mycolumnval from pmd where date=2013.05.22 
1

Как насчет:

`date`ts xasc select date,ts,mytw:deltas[ts] wavg mycolumnval from pmd where date=2013.05.22 
+0

Возникает проблема с этим запросом: веса задаются как (ts - prev ts). Я обновляю свой вопрос ... –

0

Если это не будет: date ц xasc выбрать дату, TS, mytw : (1 _ deltas ts, 0Nv) wavg mycolumnval от pmd, где date = 2013.05.22. Использование 0Np если ваш ц является DateTime

+0

Я уверен, что ваша версия не работает, у меня есть мои запросы, использующие обратный ход, и они работают нормально. Теперь, если кто-то захочет объяснить разницу (если есть какая-то причина) ... –

+0

спасибо, что указали это. причина в том, что вы уже выяснили (next-ts) vs (ts-prev) –