1 .
select metric_name, max(value) value, max(start_group) start_time, max(end_group) end_time from(
select metric_name, value,
case when @prev_ts is not null then @prev_ts end prev_ts,
case when value = 0 then @ts := timestamp end as start_group,
@ts as grouping,
@prev_ts := timestamp end_group
from metric join (select @prev_ts := null as p) prev
order by timestamp
) q
group by metric_name, grouping;
1000 , .
insert into metric(timestamp, metric_name, value)
select now() - interval rn second, 'pressure', v
from(
select @rn := @rn + 1 rn, mod(1000 - @rn,60) * pow(1000 - mod(@rn,121),1) v
from table_with_at_least_1000_rows
join (select @rn := 0) rn
limit 1000
) q
;