我需要每个“组”的ID

时间:2019-08-20 11:04:46

标签: oracle group-by

我需要在时间轴上进行分组。这意味着,所有内容都应在同一组中(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

1 个答案:

答案 0 :(得分:2)

您可以使用Tabibitosan

  public barChartData: ChartDataSets[] = [{data: []}]; // this is user output data
  public barChartLabels: Label[] = []; // this is user input data
  public barChartOptions : (ChartOptions & { annotation: any }) = {
    responsive: true,
    scales: {
      xAxes: [
        {
          id: 'years',
          position: 'left',
        }
      ],
      yAxes: [
        {
          id: 'points',
          position: 'right',
        }
      ]
    },
    annotation: {
      annotations: [
        {
          type: 'line',
          mode: 'vertical'
        },
      ],
    },
  };

组号不完全是您所拥有的,但它是中间结果,并不重要。

然后将其用于聚合:

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

db<>fiddle