2014-10-29 45 views
0

example我有一個需要分成兩個子集的數據集。每個子集必須僅包含特定時間範圍內的項目。然後,我需要將MAX(最後編輯時間)-MIN(項目添加時間)除以子集中項目的數量。因此,我的目標是計算在兩個時間範圍內處理所有項目所需的平均時間。看照片。計算不同時間範圍內的項目的平均分鐘數

我試過了,但它似乎不工作 - 結果不正確;該查詢會在WHERE子句中概述的整個時間段內產生MIN和MAX的結果(因此多天的時間會顯着地影響結果)。

SELECT 
    CASE 
    WHEN TO_CHAR(ADDED, 'HH24') BETWEEN 09 AND 11 
    THEN TRUNC(((MAX(MODIFIED) - MIN(ADDED))*24*60)/COUNT(TRANSACTIONS)) 
    ELSE 0 
    END 
    + 
    CASE 
    WHEN TO_CHAR(ADDED, 'HH24') BETWEEN 15 AND 19 
    THEN TRUNC(((MAX(MODIFIED) - MIN(ADDED))*24*60)/COUNT(TRANSACTIONS)) 
    ELSE 0 
    END AS subsets_average 
FROM TABLE 

回答

1

我明白你在做什麼。 case聲明是錯誤的地方。你想要條件裏面聚合功能:

SELECT TRUNC(((MAX(MODIFIED END)- 
       MIN(ADDED))*24*60)/COUNT(TRANSACTIONS) as grand_average, 
     TRUNC(((MAX(TO_CHAR(ADDED, 'HH24') BETWEEN 09 AND 11 THEN MODIFIED END)- 
       MIN(TO_CHAR(ADDED, 'HH24') BETWEEN 09 AND 11 THEN ADDED END))*24*60)/COUNT(TRANSACTIONS) 
      ) + 
     TRUNC(((MAX(TO_CHAR(ADDED, 'HH24') BETWEEN 15 AND 19 THEN MODIFIED END)- 
       MIN(TO_CHAR(ADDED, 'HH24') BETWEEN 15 AND 19 THEN ADDED END))*24*60)/COUNT(TRANSACTIONS) AS subsets_average 
FROM TABLE