假设我有以下用户操作。我正在寻找一个最古老的不间断行动接受文件类型xx。
删除操作将考虑中断
如果用户已接受xx,但随后接受a。这将是一次中断。
我实际上是寻找班轮行动接受xx,但它必须是最古老的,每当有删除,我们需要重置基线。
t11是预期结果。
EVENTTIME ACTION DOCUMENTTYPE
--------------------------------------
T1 Accept A
T2 Accept XX
T3 Delete XX
T4 Accept A
T5 Accept XX
T6 Accept XX
T7 Delete XX
T8 Accept A
T9 Accept XX
T10 Accept A
T11 Accept XX
T12 Accept XX
T13 Accept XX
笔记:
t2不是结果,因为t3中断了时间线。
t5不是结果,因为t7中断了时间线。
t9不是结果,因为t10接受一个中断,而xx接受一个中断。
t11是因为在上述时间线重置之后的结果。这是对xx最古老的接受。
我想行数加上额外的分组(累计和)查询解决方案。有什么想法吗?
2条答案
按热度按时间wqlqzqxt1#
一种方法使用
not exists
:另一个有趣的方法是使用窗口函数:
这使用了这样一个事实,即
'XX'
仅基于eventtime
或者基于eventtime
当按分区时dcoumenttype
.68bkxrlz2#
这将返回最后一组accept/xx行的第一行:
如果没有嵌套的olap函数,我怀疑你能得到这样的结果。