Согласно документации Oracle :
Аналитические функции - это последний набор операций, выполненных в запросе.
за исключением заключительного предложения ORDER BY. Все присоединяется и все ГДЕ, ГРУППА
Предложения BY и HAVING завершаются до того, как аналитические функции
обработанный. Поэтому аналитические функции могут появляться только в выбранных
список или предложение ORDER BY.
Это означает, что вы не можете использовать результаты аналитической функции на текущем уровне запроса.
Есть два решения для этого. Вы можете включить функцию LAG
так часто, как это необходимо, в список выбора. Обратите внимание, что это то, что вы будете делать даже с обычной функцией, потому что вы все равно не можете ссылаться на псевдоним столбца (prevrow) в другом месте этого же списка выбора.
select
completed_date,
lag(completed_date) over (order by id) as prevrow,
lag(completed_date) over (order by id) - completed_date as date_diff
from
task_complete
where workflow_id = 1
ИЛИ вы можете использовать подзапрос для получения результатов:
select
completed_date,
prevrow,
prevrow - completed_date as date_diff
from (
select
completed_date,
lag(completed_date) over (order by id) as prevrow
from
task_complete
where workflow_id = 1
)