Oracle 21c中MATCH_RECOGNIZE函数使用问题求助
问题需求
现有设备会向数据库发送带时间戳的事件标签,当其外设故障时,受影响设备会按固定顺序发送16个特定事件标签。需统计该故障的发生次数及涉及设备。
尝试使用Oracle 21c的MATCH_RECOGNIZE函数实现时遇到问题:
- 使用
+作为量词时无匹配结果 - 使用
*作为量词时会包含无关标签
需要实现精准匹配这16个标签的完整序列(注:这些标签并非该故障独有)
原代码
-- 原尝试代码示例 SELECT device_id, count(*) AS fault_count FROM event_logs MATCH_RECOGNIZE ( PARTITION BY device_id ORDER BY event_timestamp MEASURES COUNT(*) AS match_count PATTERN (TAG1 TAG2 TAG3 ... TAG16+) -- 或使用* DEFINE TAG1 AS event_tag = 'TAG_001', TAG2 AS event_tag = 'TAG_002', -- ... 依次定义TAG3到TAG16 TAG16 AS event_tag = 'TAG_016' ) GROUP BY device_id;
样本数据
| device_id | event_timestamp | event_tag |
|---|---|---|
| D001 | 2024-05-01 10:00:00 | TAG_001 |
| D001 | 2024-05-01 10:00:01 | TAG_002 |
| ... | ... | ... |
| D001 | 2024-05-01 10:00:15 | TAG_016 |
| D001 | 2024-05-01 10:05:00 | TAG_001 |
| D001 | 2024-05-01 10:05:01 | TAG_002 |
| ... | ... | ... |
| D001 | 2024-05-01 10:05:15 | TAG_016 |
| D002 | 2024-05-01 11:00:00 | TAG_001 |
| D002 | 2024-05-01 11:00:01 | TAG_003 |
期望输出
| device_id | fault_count |
|---|---|
| D001 | 2 |
| D002 | 0 |
内容的提问来源于stack exchange,提问作者spyker
相关产品推荐
相关产品推荐

