我正在使用Oracle 10g。
我希望自己加入history
表,以获取所有事件的特定类型事件的最新时间。例如,我在时间戳3
,我想知道最后一个时间戳事件E
何时发生。
以下是示例history
表和所需的输出:
ID TS EVENT ID TS OCC
----------- ---------
A 1 A 1 null
A 2 E A 2 2
A 3 E A 3 3
A 4 A 4 3
A 5 A 5 3
A 6 E A 6 6
A 7 A 7 6
B 1 E B 1 1
B 2 B 2 1
B 3 B 3 1
B 4 B 4 1
请注意,“历史记录”对于每个实体都是独立的(标有ID)。
我想这样做:
select history h1
left outer join
history h2
on h1.ID = h2.ID and h2.event='E' and h2.TS =
(
select
max(TS)
from
history h3
where
h3.task_id = h.task_id and
h3.created_ts < h.created_ts and
h3.event = 'E'
)
但甲骨文不会让我,它说:
ORA-01799: a column may not be outer-joined to a subquery
对于这个问题,我将不胜感激。
答案 0 :(得分:4)
试试这个:
SELECT t.id,
t.ts,
t.event,
MAX( case event when 'E' then ts end )
OVER
( Partition by id order by ts
rows between unbounded preceding and current row ) occ
FROM history t
;
演示 - &gt; http://www.sqlfiddle.com/#!4/50170/2
该查询应适用于Oracle 10.2及更高版本。