Простой подход к этому - создать представление, которое может (предварительно) обрабатывать ваши данные. Например:
create view averaged_sample as
select
s.*,
avg(t.value) as avg_value -- simple math to average
from sample s
join sample r on r.time between s.time - interval 100 ms
and s.time + interval 100 ms
group by s.id
Это представление будет вычислено на лету и, следовательно, будет медленным в использовании. Если вам часто нужны эти промежуточные результаты, вы можете воспользоваться их материализацией или преобразованием во вторичную таблицу, которую можно даже проиндексировать.
Функция AVG()
- это просто математическая реализация. Вы можете заменить его другой, более интересной математикой.