You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Oracle 12.2.0.2.1数据库:查询同一物品的连续PROT违规事件

审计Oracle中同一物品的连续PROT事件

我们有一张记录物品保护操作的表(Oracle 12.2.0.2.1),字段说明如下:

  • TENURE_NUMBER_ID:物品唯一标识符
  • EVENT_NUMBER:事件唯一标识符
  • EVENT_TYPE:事件类型,PROT代表添加保护,RMPR代表移除保护

规则要求同一物品不能连续添加保护,必须先移除现有保护才能添加新的。现在需要找出所有违反该规则的连续PROT事件。

样本数据

TENURE_NUMBER_IDEVENT_NUMBEREVENT_TYPE
10993915994168RMPR
10993915994169PROT
10994895963896PROT
10994895994168RMPR
10994895994169PROT
10994915963896PROT
10994915994168RMPR
10994915994169PROT
10994915990993PROT
10994915983849RMPR
10999675989988PROT
10999675989990PROT
10999675989992RMPR
10999675989993PROT
10999675989999PROT

解决方案SQL

SELECT
    TENURE_NUMBER_ID,
    EVENT_NUMBER,
    EVENT_TYPE,
    PREV_EVENT_NUMBER,
    PREV_EVENT_TYPE
FROM (
    SELECT
        TENURE_NUMBER_ID,
        EVENT_NUMBER,
        EVENT_TYPE,
        LAG(EVENT_NUMBER) OVER (PARTITION BY TENURE_NUMBER_ID ORDER BY EVENT_NUMBER) AS PREV_EVENT_NUMBER,
        LAG(EVENT_TYPE) OVER (PARTITION BY TENURE_NUMBER_ID ORDER BY EVENT_NUMBER) AS PREV_EVENT_TYPE
    FROM
        your_table_name -- 替换为实际表名
)
WHERE
    EVENT_TYPE = 'PROT'
    AND PREV_EVENT_TYPE = 'PROT';

逻辑说明

  1. 窗口函数LAG():按物品ID(TENURE_NUMBER_ID)分组,按事件编号(EVENT_NUMBER,假设编号递增对应事件发生顺序,若表中有时间字段请替换为时间列)排序,获取当前事件的上一个事件的编号和类型。
  2. 筛选条件:只保留当前事件和上一个事件均为PROT的记录,这些就是违反规则的连续添加操作。

样本数据的预期结果

TENURE_NUMBER_IDEVENT_NUMBEREVENT_TYPEPREV_EVENT_NUMBERPREV_EVENT_TYPE
10994915990993PROT5994169PROT
10999675989990PROT5989988PROT
10999675989999PROT5989993PROT

内容的提问来源于stack exchange,提问作者Mike

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 14:05:23