2014-10-29 3 views
0

example У меня есть набор данных, который необходимо разделить на два подмножества. Каждое подмножество должно включать только элементы в определенный период времени. Затем мне нужно взять MAX (последнее отредактированное время) -MIN (добавленное количество элементов) и разделить на количество элементов в подмножестве. Поэтому моя цель состоит в том, чтобы вычислить СРЕДНЕЕ количество времени, которое требуется для работы над всеми элементами в течение двух таймфреймов. Смотрите изображение.!Расчет средних минут для элементов в разных временных рамках

Я пробовал это, но, похоже, не работает - результаты неверны; запрос производит результат для MIN и MAX в течение всего периода времени, указанного в предложении WHERE (так что период в несколько дней резко закручивает результат).

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 
Смежные вопросы