Alternatywną opcją jest row_number()
i warunkowa funkcja okna:
select
name,
weight,
coalesce(
max(case when rn = 4 then weight end) over(order by rn),
99.9
) imagined_weight
from (select c.*, row_number() over(order by weight) rn from cats c) c