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

时间:2015-05-05 12:10:00

标签: sql oracle oracle11g

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

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

--cnt

此查询无效(ORA-00904),因为我在内部选择中使用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 并具有两级嵌套。

如何使用Oracle 11实现这一目标?

1 个答案:

答案 0 :(得分:2)

我认为你可以用分析函数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