我有一个Oracle SQL数据库,其中包含订单簿信息,例如
| 订单编号|时间戳|操作|订单状态|...|
| - ------|- ------|- ------|- ------|- ------|
| 1个|00时00分01秒|插入|新增|...|
| 1个|00时00分05秒|更新|部分填充|...|
| 第二章|00时00分07秒|更新|部分填充|...|
| 1个|00时00分08秒|取消|已填充|...|
| 三个|00时00分08秒|插入|新增|...|
现在,这个数据并不总是完全填充的,例如,有时候会有order_id缺少信息。
我试图识别的一个此类问题是缺少操作“INSERT”的订单(因此,具有相同order_ID的所有订单),例如,存在具有操作“UPDATE”或“CANCEL”但没有“INSERT”的order_id。在上面的示例表中,order_id 2(它具有“UPDATE”,但没有“INSERT”)就是这种情况
我能够通过下载整个数据集并使用Python分析数据来执行此分析,但如果可能,我希望能够使用直接SQL查询(更快)完成此操作。
3条答案
按热度按时间goucqfw61#
您可以使用条件聚合来检查某些状态是否与其他状态沿着存在。
对于示例数据,它返回
| 订单编号|
| - ------|
| 第二章|
fiddle
vmdwslir2#
看看以下内容是否有帮助:
js4nwp543#
在Oracle 12中,可以使用
MATCH_RECOGNIZE
执行逐行模式匹配,以确定UPDATE
或CANCEL
操作之前是否有INSERT
操作:其中,对于示例数据:
输出:
| 订单编号|
| - ------|
| 第二章|
或者,如果您需要
UPDATE
或CANCEL
操作位于组中第一个的组,则可以使用:其输出相同。
fiddle