Я думаю, вы просто хотите агрегировать:
select trip, min(hub1_dist), min(hub2_dist), min(hub3_dist), . . .
from data_base
group by trip;
Вам нужно ввести выражения для каждого столбца.Электронная таблица может помочь вам сгенерировать запрос.Или вы можете сделать что-то вроде этого:
select string_agg(replace('min(hub@n_dist) as hub@n_dist', '@n', gs.n::text), ', ')
from generate_series(1, 50, 1) gs(n)
РЕДАКТИРОВАТЬ:
Вы можете получить скорость для минимальных расстояний, используя функции массива:
select trip, min(hub1_dist),
(array_agg(speed order by hub1_dist))[1] as speed_at_min1,
min(hub2_dist),
(array_agg(speed order by hub2_dist))[1] as speed_at_min2,
min(hub3_dist),
(array_agg(speed order by hub3_dist))[1] as speed_at_min3,
. . .
from data_base
group by trip;