根据Oracle 文档:
分析函数是查询中执行的最后一组操作,除了最后的 ORDER BY 子句。在处理分析函数之前,所有连接和所有 WHERE、GROUP 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
)