Za każdym razem, gdy zaczynasz myśleć, że chcesz zlokalizować grupę GROUP BY, powinieneś zacząć myśleć o funkcje okien zamiast tego.
Myślę, że szukasz czegoś takiego:
select unit_id, time, diag
from (
select unit_id, time, diag,
rank() over (partition by unit_id order by time desc) as rank
from diagnostics.unit_diag_history
) as dt
where rank = 1
Możesz chcieć dodać coś do ORDER BY, aby konsekwentnie łamać remisy, ale nie zmieniłoby to ogólnej techniki.