假设我有以下用户操作。我正在寻找接受XX型文档的最古老的不间断操作。
我实际上是在寻找接受XX的班轮行动,但它必须是最旧的,每当删除XX时,我们都需要重置基线。
T11是预期的结果。
EVENTTIME ACTION DOCUMENTTYPE
T1 Accept A
T2 Accept XX
T3 Delete A
T4 Accept A
T5 Accept XX
T6 Accept XX
T7 Delete A
T8 Accept A
T9 Accept XX
T10 Accept A
T11 Accept XX
T12 Accept XX
T13 Accept XX
注意:
我正在考虑行号加上额外的分组(累积和)查询解决方案。有什么想法吗?
select min(eventtime)
from t
where not exists (select 1
from t t2
where t2.eventtime > t.eventtime and t2.DOCUMENTTYPE <> 'XX'
);
另一种有趣的方法窗口功能:
select min(eventtime)
from (select t.*,
row_number() over (order by eventtime desc) as seqnum,
row_number() over (partition by documenttype order by eventtime desc) as seqnum_dt
from t
) t
where documenttype = 'XX' and
seqnum = seqnum_dt;