У меня около 500 датчиков, которые испускают значение примерно раз в минуту. Можно предположить, что значение для датчика остается постоянным до тех пор, пока не будет выбрано следующее значение, что создаст временной ряд. Датчики не синхронизируются с точки зрения того, когда они испускают данные (поэтому временные метки наблюдения меняются), но все они собираются централизованно и сохраняются на датчик (чтобы обеспечить фильтрацию подмножеством датчиков).Агрегаты таймеров от датчиков
Как я могу создать совокупный временной ряд, который дает сумму данных от датчиков? n (необходимо создать временные ряды в течение 1 дня наблюдений - поэтому необходимо учитывать 24x60x500 наблюдений в день). Расчеты также должны быть быстрыми, предпочтительно работать в < 1s.
Пример - необработанные входные данные:
q)n:10
q)tbl:([]time:n?.z.t;sensor:n?3;val:n?100.0)
q)select from tbl
time sensor val
----------------------------
01:43:58.525 0 33.32978
04:35:12.181 0 78.75249
04:35:31.388 0 1.898088
02:31:11.594 1 16.63539
07:16:40.320 1 52.34027
00:49:55.557 2 45.47007
01:18:57.918 2 42.46532
02:37:14.070 2 91.98683
03:48:43.055 2 41.855
06:34:32.414 2 9.840246
Выход Я ищу должен показать те же временные метки, а сумма по датчиков. Если у датчика нет записи, определенной в подходящей временной отметке, тогда должно использоваться предыдущее значение (в записях подразумеваются только времена, когда изменяется выход датчика).
Ожидаемые результаты, упорядоченные по времени
time aggregatedvalue
----------------------------
00:49:55.557 45.47007/0 (sensor 0) + 0 (sensor 1) + 45.47007 (sensor 2)
01:18:57.918 42.46532/0 (sensor 0) + 0 (sensor 1) + 42.46532 (new value on sensor 2)
01:43:58.525 75.7951 /33.32978 + 0 + 42.46532
02:31:11.594 92.43049/33.32978 + 16.63539 + 42.46532
02:37:14.070 141.952 /33.32978 + 16.63539 + 91.98683
03:48:43.055 91.82017/33.32978 + 16.63539 + 41.855
04:35:12.181 137.24288/78.75249 + 16.63539 + 41.855
04:35:31.388 60.388478/1.898088 + 16.63539 + 41.855
06:34:32.414 28.373724/1.898088 + 16.63539 + 9.840246
07:16:40.320 64.078604/1.898088 + 52.34027 + 9.840246
благодарит за быстрый ответ, но не получает выход совершенно прав. Я обновил вопрос с ожидаемым выходом. У меня около 3 лет данных, поэтому вам также нужно будет посмотреть на развёртывание/разбиение. –
только что обновил мой ответ. Как я уже упоминал, есть, вероятно, более эффективные способы сделать это в векторной форме. – user1895961
ОК, что дает правильный выход. К сожалению, нет гарантии приезда (только приблизительный заказ) –