Oracle 12 C - Использование Width_Bucket с дополнительным разделением по пункту - PullRequest
0 голосов
/ 13 июля 2020

У меня есть следующий набор данных (упрощенный), который состоит из 'WORK_TYPE' и 'TASKTIME', связанных с этим типом работы.

+-----------+----------+--------+
| WORK_TYPE | TASKTIME | OUTPUT |
+-----------+----------+--------+
| TYPE1     |       10 |      1 |
| TYPE1     |       20 |      1 |
| TYPE1     |       30 |      2 |
| TYPE1     |       30 |      2 |
| TYPE2     |       10 |      1 |
| TYPE2     |       10 |      1 |
| TYPE2     |       20 |      2 |
| TYPE2     |       20 |      2 |
+-----------+----------+--------+

Я хочу sh использовать функцию width_bucket на этом набор данных. Однако я хочу разделить данные по work_types, чтобы каждый тип был сгруппирован независимо от всего набора данных.

SELECT 
      TASKTIME
     ,WORK_TYPE
     ,WIDTH_BUCKET(TASKTIME,0,100,30) AS TASKTIME_BUCKET
     ,WIDTH_BUCKET(TASKTIME,0,100,30) OVER (PARTITION BY WORK_TYPE) AS TASKTME_BUCKET_WT --This Errors
FROM TABLE1

Первый width_bucket работает, однако объединяет значения по всему набору данных. Я пытался использовать OVER (PARITION BY WORK_TYPE) после width_bucket, но это вызывает следующую ошибку: ORA-00923: FROM keyword not found where expected

Есть идеи?

1 Ответ

0 голосов
/ 13 июля 2020

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

SELECT TASKTIME, WORK_TYPE,
       WIDTH_BUCKET(TASKTIME, 0, 100, 30) AS TASKTIME_BUCKET
       WIDTH_BUCKET(TASKTIME, MIN_TASKTIME, MAX_TASKTIME, 30) AS TASKTME_BUCKET_WT 
FROM (SELECT t1.*,
             MIN(TASKTIME) OVER (PARTITION BY WORK_TYPE) as MIN_TASKTIME,
             MAX(TASKTIME) OVER (PARTITION BY WORK_TYPE) as MAX_TASKTIME
      FROM TABLE1 t1
     ) t1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...