首页 > 解决方案 > Oracle SQL - 查找自动增量列的原始 ID

问题描述

我的 ERP 数据库中有一个表,其中包含有关某些事件的数据。它有开始日期、结束日期和一列显示事件是否是前一个事件的延续(sequential_id 引用 unique_id)。这是一个例子:

唯一身份 开始日期 结束日期 序列号
001 2021-01-01 2021-01-15
002 2021-02-01 2021-02-16 001
003 2021-03-01 2021-03-17 002
004 2021-03-10 2021-03-11
005 2021-03-19

在上面的示例中,行 001、002 和 003 都是同一事件的一部分,而 004/005 是唯一事件,没有序列。如何以输出如下所示的方式对数据进行分组:

origin_id 开始日期 结束日期
001 2021-01-01 2021-03-17
004 2021-03-10 2021-03-11
005 2021-03-19

我试过使用 group by,但由于 sequence_id 是自动增量的,它不起作用。

提前致谢。

标签: sqloraclegroup-bysubqueryoracle-sqldeveloper

解决方案


您可以使用 modern match_recognize,它是此类任务的最佳解决方案:

使用 MATCH_RECOGNIZE 进行模式识别

DBFiddle

select *
from t
match_recognize(
  measures 
     first(unique_id) start_unique_id,
     first(start_date) start_date,
     last(end_date) end_date
  pattern (strt nxt*)
  define nxt as sequential_id=prev(unique_id)
);

推荐阅读