Oracle SQL-按列值和数量对分区数据集进行分区,然后从每个分区中检索第一行和最后一行

时间:2018-06-29 20:10:32

标签: sql database oracle

我有一个如下所示的数据集:

Sample Dataset

我正在尝试按组号,子组号,产品和收货方地址对数据进行分区。每个分区不应有超过3行的记录。因此,即使满足以上所有条件,第4条记录仍将位于新分区中。

当前,我的SQL语句如下:

*********

但是我无法弄清楚如何对相同条件的每三行进行分区,以便可以像下面的图像一样显示数据:

Data Set after grouping and partitioning

任何建议将不胜感激!

1 个答案:

答案 0 :(得分:0)

使用row_number()group by

Select Group#, Sub_Group#, Product, Ship_To,
       MIN(Sub_Group_Index) as MIN_INDEX, MAX(Sub_Group_Index) AS MAX_INDEX
from (select st.*,
             row_number() over (partition by Group#, Sub_Group#, Product, Ship_To order by uniqueid) as seqnum
      from [sample_table] st
     ) st
group by Group#, Sub_Group#, Product, Ship_To, trunc((seqnum - 1) / 3);