Заявката по-долу избира всички редове, чието състояние не е нула.
За редовете, където състоянието е „Изключено“, той използва подзаявка, за да върне максималното тегло между последното „Включено“ и текущото „Изключено“ + 3 секунди
select t.TimeStr, t.Status,
case
when status = 'Off'
then (select max(cast(Weight as signed)) from tempbatch t2
where t2.TimeStr between
(select max(TimeStr)
from tempbatch t3
where status = 'On' and t3.TimeStr < t.TimeStr)
and date_add(t.TimeStr, interval 3 second)
)
else Weight
end as Weight
from tempbatch t
where t.Status is not null
order by TimeStr
http://sqlfiddle.com/#!9/f27fb/6