Добавить столбец в SQL Таблицу на основе других строк в таблице - PullRequest
1 голос
/ 21 апреля 2020

У меня есть таблица, которая содержит время остановки для транзитной системы. Детали не важны, но моя таблица по сути выглядит так:

example of my table columns

Я импортирую данные из файла CSV, который содержит все, кроме идентификатор следующей остановки. Я хочу сгенерировать Next Stop ID, чтобы ускорить некоторую обработку данных, которую я собираюсь сделать в своем приложении.

Для каждой строки ID следующей остановки должен быть идентификатором Stop из следующей строки с соответствующим идентификатором Trip и Сервисный ID. Упорядочение должно основываться на последовательности стопа, которая будет увеличиваться, но не обязательно в порядке (1, 20, 21, 23 и т. Д. 1020 *, а не 1,2,3,4 ...).

Вот пример того, как я надеюсь, это будет выглядеть. Для простоты я сохранил все идентификаторы услуг, и есть два идентификатора поездки. Если следующей остановки нет, я хочу, чтобы эта запись была пустой.

table showing what I hope to accomplish

Я думаю, что имеет смысл сделать это полностью в SQL, но я не уверен, как лучше это сделать. Я знаю, как бы это сделать на стандартном языке программирования, но не SQL. Спасибо за вашу помощь.

1 Ответ

1 голос
/ 21 апреля 2020

Вы можете использовать lead():

select 
    t.*,
    lead(stop_id) 
        over(partition by trip_id, service_id order by stop_sequence) next_stop_id
from mytable t

Не обязательно хорошая идея на самом деле хранить эту производную информацию, так как вы можете вычислять на лету, когда это необходимо (вы можете поместить запрос в чтобы облегчить доступ к нему). Но если вы хотите это в update, тогда, предполагая, что stop_id является первичным ключом таблицы, это будет выглядеть так:

update mytable 
set next_stop_id = t.next_stop_id
from (
    select 
        stop_id, 
        lead(stop_id) over(partition by trip_id, service_id order by stop_id) next_stop_id
    from mytable
) t
where mytable.stop_id = t.stop_id
...