我需要一个查询来获取项目的值以及前一项的值(如果存在)。
我使用以下查询(实际的简化):
--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实现这一目标?
答案 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