我需要每"group"一个身份证



我需要对时间线进行分组。这意味着,所有内容都应该在同一组中(C,I,"A"(。如果"A"的值已更改,则它是一个新组。

我已经尝试了许多Oracle的想法,比如分析函数和分组;但我没有得到我想要的结果。

没有可用的代码

原始数据:

C I A FROM_DATE TO_DATE 1   1   4   01.08.19 00:00  05.08.19 00:00 1   1   4   06.08.19 00:00  10.08.19 00:00 1   1   6   11.08.19 00:00  17.08.19 00:00 1   1   5   18.08.19 00:00  21.08.19 00:00 1   1   5   22.08.19 00:00  28.08.19 00:00 1   1   5   29.08.19 00:00  05.09.19 00:00 1 1 4 06.09.19 00:00 31.12.99 00:00

预期(中级(:

C I A FROM_DATE TO_DATE GROUP_ID 1   1   4   01.08.19 00:00  05.08.19 00:00  1 1   1   4   06.08.19 00:00  10.08.19 00:00  1 1   1   6   11.08.19 00:00  17.08.19 00:00  2 1   1   5   18.08.19 00:00  21.08.19 00:00  3 1   1   5   22.08.19 00:00  28.08.19 00:00  3 1   1   5   29.08.19 00:00  05.09.19 00:00  3 1 1 4 06.09.19 00:00 31.12.99 00:00 4

预期(最终(:

C I A FROM_DATE TO_DATE 1   1   4   01.08.19 00:00  10.08.19 00:00 1   1   6   11.08.19 00:00  17.08.19 00:00 1   1   5   18.08.19 00:00  05.09.19 00:00 1 1 4 06.09.19 00:00 31.12.99 00:00

你可以使用Tabibitosan:

select t.*,
row_number() over (order by from_date)
- row_number() over (partition by c, i, a order by from_date) as grp
from your_table t;
C          I          A FROM_DATE  TO_DATE           GRP
---------- ---------- ---------- ---------- ---------- ----------
1          1          4 2019-08-01 2019-08-05          0
1          1          4 2019-08-06 2019-08-10          0
1          1          6 2019-08-11 2019-08-17          2
1          1          5 2019-08-18 2019-08-21          3
1          1          5 2019-08-22 2019-08-28          3
1          1          5 2019-08-29 2019-09-05          3
1          1          4 2019-09-06 1999-12-31          4

组号并不完全是你所拥有的,但因为它是一个中间结果,并不重要。

然后将其用于聚合:

select c, i, a, min(from_date) as from_date, max(to_date) as to_date
from (
select t.*,
row_number() over (order by from_date)
- row_number() over (partition by c, i, a order by from_date) as grp
from your_table t
)
group by c, i, a, grp
order by c, i, from_date;
C          I          A FROM_DATE  TO_DATE   
---------- ---------- ---------- ---------- ----------
1          1          4 2019-08-01 2019-08-10
1          1          6 2019-08-11 2019-08-17
1          1          5 2019-08-18 2019-09-05
1          1          4 2019-09-06 1999-12-31

数据库<>小提琴