Oracleのドキュメントによると:
分析関数は、最後の ORDER BY 句を除いて、クエリで実行される最後の一連の操作です。分析関数が処理される前に、すべての結合とすべての WHERE、GROUP BY、および HAVING 句が完了します。したがって、分析関数は、選択リストまたは ORDER BY 句にのみ表示できます。
これは、クエリの現在のレベルでは分析関数の結果を使用できないことを意味します。
これには 2 つの解決策があります。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
)