Вам необходимо присоединиться к результатам запроса, который находит максимальное (значение), например:
select dt.Part_id, dt.Category, dt.Value, dt.Time_Captured
from data_table dt
join (select Part_id, Category, max(Value) as Value
from data_table group by 1, 2) x
on x.Part_id = dt.Part_id and x.Category = dt.Category
where dt.category = 'Temperature';
Обратите внимание, что это вернет несколько строк, если есть несколько строк с одинаковым значением максимума,
Если вы хотите ограничить это одной строкой, даже если есть несколько совпадений для max (значения), выберите max (Time_Captured) (или min (Time_Captured), если хотите), например:
select dt.Part_id, dt.Category, dt.Value, max(dt.Time_Captured) as Time_Captured
from data_table dt
join (select Part_id, Category, max(Value) as Value
from data_table group by 1, 2) x
on x.Part_id = dt.Part_id and x.Category = dt.Category
where dt.category = 'Temperature'
group by 1, 2, 3;