Oracle SQL - набор данных раздела по значению и количеству столбцов, затем извлекаются первая и последняя строки из каждого раздела - PullRequest
0 голосов
/ 29 июня 2018

У меня есть набор данных, показанный ниже:

Sample Dataset

И я пытаюсь разделить данные по группам, подгруппам, продуктам и адресам доставки. Каждый раздел не должен иметь более 3 строк записей. Таким образом, даже если все вышеперечисленные условия были выполнены, 4-я запись будет в новом разделе.

В настоящее время мой оператор SQL выглядит следующим образом:

Select Group#,
       Sub_Group#,
       Product,
       Ship_To,
       MIN(Sub_Group_Index) KEEP(DENSE_RANK ORDER BY SUB_GROUP_INDEX) OVER (PARTITION BY SHIP_TO) AS MIN_INDEX,
       MAX(Sub_Group_Index) KEEP(DENSE_RANK ORDER BY SUB_GROUP_INDEX) OVER (PARTITION BY SHIP_TO) AS MAX_INDEX
FROM [sample_table]

Но я не могу понять, как разделить каждые 3 строки с одинаковыми условиями, чтобы данные могли отображаться, как показано на рисунке ниже:

Data Set after grouping and partitioning

Любое предложение будет оценено!

1 Ответ

0 голосов
/ 29 июня 2018

Используйте 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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...