Для этого была создана аналитическая функция LEAD:
SELECT
input,
input as col1,
COALESCE(LEAD(input) OVER(ORDER BY input), input) as col2
FROM table
Lead возвращает заданное значение из строки "next", значение "next" выводится из предложения ORDER BY.Ведущий может дополнительно принимать числовой аргумент, если вы хотите, чтобы значение было 2, 3, N строк впереди
Я сделал предположение, что ваш порядок в порядке возрастания даты, в которой input
, но еслиВы хотите, чтобы что-то еще определяло порядок строк, поместите его в "order by" внутри "over"
Lead вернет ноль в последней строке, поэтому я объединю входное значение, чтобы оно соответствовало вашемуспекуляцияУ Lead есть необязательный параметр того, какое значение использовать из текущей строки, если в смещении нет строки, я просто не использую его, так как считаю его менее читабельным.LEAD(input, 3, othercol)
означает "дать значение ввода от 3-х строк впереди или дать othercol, если строки нет. Othercol может быть любым столбцом из строки, даже input
снова