Собственно имеется таблица flights и следующий запрос:
SELECT carrier, id,
(SELECT COUNT (*)
FROM flights f
WHERE f.id < flights.id
AND f.carrier=flights.carrier) + 1
AS flight_sequence_number
FROM flights;
По идее запрос должен показывать порядковый номер конкретной авиалинии. Но я не понимаю механику вот этой строки f.id < flights.id.
Спасибо за помощь.
PS
carrier = авиалиния
flight_sequence_number = порядковый номер
shimapa, у вас здоровые рефлексы - попробовали и получилось )
Вот вам бонусом небольшой комментарий: на больших таблицах этот запрос адски тормозит, пропорционально квадрату размера таблицы.
На моём компе таблица в 10000 полётов (1 маршрут) обсчитывается ~10сек.
Простыми средствами это, видимо, не лечится, но можно переписать с оконными функциями (синтаксис postgresql):
SELECT
carrier,
id,
COUNT(*)
OVER (
PARTITION BY carrier
ORDER BY id ) AS flight_sequence_number
FROM flights;
f.id < flights.id - это условие позволяет выбрать все рейсы, которые были до текущего рейса.
Тут надо учесть, что id - это скорее всего уникальное поле с автоинкрементом, поэтому у предыдущих рейсов id будет всегда меньше, чем у текущего.