Как можно ссылаться на вычисленное значение из предыдущей строки в SQL-запросе? В моем случае каждая строка является событием, которое каким-то образом управляет одним и тем же значением из предыдущей строки.Ссылка на значение предыдущего исчисляемого значения в Oracle
Необработанные данные выглядят следующим образом:
Eventno Eventtype Totalcharge 3 ACQ 32 2 OUT NULL 1 OUT NULL
Допустит, каждый типСобытия = OUT должен половина предыдущего totalcharge строки в колонке под названием Remaincharge:
Eventno Eventtype Totalcharge Remaincharge 3 ACQ 32 32 2 OUT NULL 16 1 OUT NULL 8
Я уже попробовал LAG аналитическая функция, но это не позволяет мне получить вычисленное значение из предыдущей строки. Пытался что-то вроде этого:
LAG(remaincharge, 1, totalcharge) OVER (PARTITION BY ...) as remaincharge
Но это не сработало, потому что remaingcharge не может быть найден.
Любые идеи, как достичь этого? Требуется функция аналитики, которая может дать мне кумулятивную сумму, но при условии, что функция вместо этого имеет доступ к предыдущему значению.
Спасибо заранее!
Описание проблемы Обновление
Я боюсь, что мой пример проблема была в целом, вот лучшее описание проблемы:
Что остается totalcharge определяется отношением outqty/(предыдущий remainqty).
Eventno Eventtype Totalcharge Remainqty Outqty 4 ACQ 32 100 0 3 OTHER NULL 100 0 2 OUT NULL 60 40 1 OUT NULL 0 60
Eventno Eventtype Totalcharge Remainqty Outqty Remaincharge 4 ACQ 32 100 0 32 3 OTHER NULL 100 0 32 - (0/100 * 32) = 32 2 OUT NULL 60 40 32 - (40/100 * 32) = 12.8 1 OUT NULL 0 60 12.8 - (60/60 * 12.8) = 0
Я одобрил ранее, но это решает. Текущая строка - это различие ... Я не считал это. – Ben
Большое спасибо @Ben и @ alex-poole! Думаю, мы поняли. Сделал некоторые незначительные изменения в случае увеличения оставшейся части (может случиться). Вместо того, чтобы делить на фиксированный 100, необходимо использовать предыдущий остаток. Получил его с помощью функции LAG(): LAG (fae.remainqty, 1, 0) OVER (PARTITION BY fac.facid ORDER BY eventno DESC) AS previous_remainqty – Kristoffer