【发布时间】:2019-12-02 18:52:22
【问题描述】:
给定一个开始日期,我有很多 id 的事件日志列表。对于每个 id 和起点,选择以“成功”条目开头的按时间排序的序列。我只需要检索失败的 id 作为下一个事件,并且只检索“成功”之前的事务(或者如果只有失败,则检索到最后一个条目)。 “失败” - 条目很少。潜在后续失败的数量没有“自然”界限。
简化输入(日期格式 dd.mm.yyyy):
id timestamp event
123 12.09.2019 success
123 13.09.2019 success
124 12.09.2019 success
124 15.09.2019 failure
124 16.09.2019 success
124 17.09.2019 success
124 18.09.2019 failure
126 12.09.2019 success
126 16.09.2019 failure
126 17.09.2019 failure
128 …
Expected Output:
124 12.09.2019 success
124 15.09.2019 failure
124 16.09.2019 success
126 12.09.2019 success
126 16.09.2019 failure
126 17.09.2019 failure
123 被丢弃,因为下一个事件是成功的。 124 第一次成功后的所有内容都将被丢弃。 126 永远不会到达“成功”阶段,因此所有内容都会被检索。
我可以通过滞后/领先测试下一个交易是否成功并排除那些 - 但是如何找到下一个“成功”行(如果它甚至可能不存在?)。我在 python 中轻松地解决了这个问题,计算每个 id-group 的“成功”条目,但我在传输所有数据时产生了很多 IO。有没有办法计算每个 id 可能在分区 over- 子句中出现的成功次数并在 2 之后剪切?
我通过 cx_oracle/python 从 jupyter-notebook 访问 oracle 11g(即,我将 sql 语句传递给 db)。每天大约有 5 万个 ID 和高达数百万的交易。
【问题讨论】:
标签: oracle oracle11g time-series window-functions