簡體   English   中英

Oracle 12C - 使用 Width_Bucket 並通過子句進行過度分區

[英]Oracle 12C - Using Width_Bucket with Over Partition By Clause

我有以下數據集(簡化),由與該工作類型關聯的“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 |
+-----------+----------+--------+

我希望在這個數據集上使用 width_bucket function。 但是,我想按 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 有效,但是將值存儲在整個數據集中。 我嘗試在 width_bucket 之后使用OVER (PARITION BY WORK_TYPE) ,但這會導致以下錯誤: ORA-00923: FROM keyword not found where expected

有任何想法嗎?

如果您想要每個組的寬度相等的桶,您可以為每個組計算單獨的最小值和最大值:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM