select
distinct event_type,
FIRST_VALUE(value) over (partition by event_type order by time desc) as value
from (
select
event_type,
(FIRST_VALUE(value) over (partition by event_type order by time desc) - LEAD(value) over (partition by event_type order by time desc)) as value,
time
from events
) t_type_diff
where value is not null
order by event_type asc;