在有序嵌套子查询中访问父标识符

Accesing parent identifier in an ordered nested subquery

我需要一个查询来获取一个项目的值以及上一个项目的值(如果存在)。

我正在使用以下查询(实际的简化):

select v1.value item_value,
nvl(
  (
    select * from (
      select v2.value
      from ITEMS v2
      where v2.insert_date<v1.insert_date
      order by v2.insert_date desc
    ) where rownum=1
  ), 0
) as previous_value
from ITEMS v1
where v1.item_id=1234

此查询将不起作用 (ORA-00904),因为我在具有两层嵌套的内部 select 中使用 v1.insert_date

如何使用 Oracle 11 实现此目的?

我想你可以用解析函数 LAG 来实现这个。有关解析函数的更多信息 LAG LEAD

我创建了一个示例查询:

with items as (
select 1 as value, sysdate as insert_date from dual
union all 
select 2 as value, sysdate-1 as insert_date from dual
union all
select 3 as value, sysdate+1 as insert_date from dual
)

select v1.value item_value,
lag(v1.value,1,0) over (order by v1.insert_date desc) as previous_value,insert_date
from ITEMS v1
order by insert_date desc