Будет выведено две записи, если пользователь потратил равные макс. Часы на два почтовых индекса:
select
UserID,
Postcode,
Hours
from
(
select
UserID,
Postcode,
Hours,
dense_rank() over(partition by userId order by hours desc) rn
from (select --skip this subquery if hours already aggregated by user, postcode
UserID, Postcode, sum(Hours) hours
from table group by UserID, Postcode
) s
)s
where rn = 1;
Используйте row_number() over(partition by userId order by hours desc) rn
вместо dense_rank()
, если вам нужна отдельная запись на пользователя.