Вы можете использовать DISTINCT ON
для получения первого t_id
в час.
SELECT DISTINCT ON (date_trunc('hour', time))
t_id, date_trunc('hour', time)
FROM t
WHERE date_trunc('day', time) = current_date
ORDER BY date_trunc('hour', time), t_id;
DISTINCT ON (date_trunc('hour', time))
вместе с ORDER BY date_trunc('hour', time), t_id
позволяет нам получать самое низкое значение t_id за каждый час.
Если вместо этого вам нужен самый первый t_id в порядке времени, вы можете сделать следующее:
SELECT DISTINCT ON (date_trunc('hour', time))
t_id, date_trunc('hour', time)
FROM t
WHERE date_trunc('day', time) = current_date
ORDER BY date_trunc('hour', time), time;
В этом случае они совпадают, но в скрипте, которую вы добавили вкомментарии, это не так.