Один метод использует lag()
и агрегирование:
with t AS (
SELECT 'tom' AS name, '2020W10' AS week, 76 AS weight UNION ALL
select 'tom' , '2020W09' , 75 UNION ALL
select 'tom' , '2020W08' , 74 UNION ALL
select 'jane' , '2020W10' , 65 UNION ALL
select 'jane' , '2020W09' , 65 UNION ALL
select 'jane' , '2020W08' , 64
)
select t.name
from (select t.*, lag(weight) over (partition by name order by week) as prev_weight
from t
) t
group by t.name
having countif(prev_weight >= weight) = 0 ;