2014-10-29 47 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