Это должно быть примерно так
select difference(last("value")) from interface_rx WHERE "type" = 'if_octets' and time > now() - 1h group by time(1m)
Этот запрос должен возвращать около 60 значений; 1 разница в минуту за прошедший час. last
в этом случае означает, что для каждого 1-минутного периода используется последнее значение (если их больше одного)
Отличия к вашему запросу:
and time > now() - 1h
отсутствует - возможно, это ошибка редактирования, но она не показалась действительной.
если вы хотите статистику в минуту, тогда вам нужно group by time(1m)
. Вы группировали по 10 секунд, поэтому результатом была бы разница каждые 10 секунд.
Что вы также можете захотеть сделать, это заполнить пропущенные значения предыдущим доступным значением (и соответственно вы получите ноль за этот период)
select difference(last("value")) from interface_rx WHERE "type" = 'if_octets' and time > now() - 1h group by time(1m) fill(previous)
РЕДАКТИРОВАТЬ: fill(previous)
, вероятно, не то, что вы хотите, потому что, если самые последние значения еще не записаны, они будут заменены более старыми, и вы получите разницу = 0 в качестве самого последнего значения.
Если вы хотите только самое последнее значение, вы можете сделать что-то вроде
select difference(last("value")) from interface_rx WHERE "type" = 'if_octets' and time > now() - 1h group by time(1m) fill(previous) order by time DESC limit 1